当前位置: 首页 > news >正文

【蓝桥杯14天冲刺课题单】Day 8

1.题目链接:19714 数字诗意

这道题是一道数学题。

先考虑奇数,已知奇数都可以表示为两个相邻的数字之和,2k+1=k+(k+1) ,那么所有的奇数都不会被计入。

那么就需要考虑偶数什么情况需要被统计。根据打表,其实可以发现除了2^n的偶数都可以被分成连续数字相加的和。那么该如何证明呢?

设该偶数为a_i = x+(x+1)+(x+2)+\cdot \cdot \cdot +(x+m),根据首项*项数/2的求和公式得:a_i = \frac{(2x+m)(m+1)}{2}

对m进行分类讨论:

  • 若m为奇数,则2x+m为奇数,m+1为偶数,a_i至少有一个奇因子(来自(2x+m))。
  • 若 m 为偶数,则 2x+m为偶数,m+1 为奇数,a_i至少有一个奇因子(来自m+1)。

因此,如果 a_i 可以表示为连续的正整数相加,其至少含有一个奇因子,必然不会是2的幂次。

需要注意的是数据范围是:1\leqslant a_i \leqslant 10^{16},则需要开long long,要养成注意数据范围的好习惯。

#include <iostream>
#include <cstdio>
#include <algorithm>
#define ll long long int
using namespace std;
int n;

int check(ll num) //判断是否为2^n的值
{
	int rest,ans_number=0;
	while(num)
	{
		rest=num%2;
		if(rest == 1) ans_number++;
		num/=2;
	}
	if(ans_number == 1) return 1;
	else return 0;
}

int main()
{
	int ans=0;
	cin>>n;
	for(int i=1;i<=n;++i)
	{
		ll a;
		cin>>a;
		if(check(a) == 1) ans++;
	}
	cout<<ans;	
	return 0;
}

官方代码:

#include<bits/stdc++.h>
using namespace std;
int main(){
    int n , cnt = 0;
    cin >> n;
    for(int i = 1 ; i <= n ; i ++){
        long long x;
        cin >> x;
        if(x & (x - 1)) cnt ++ ; //直接进行位运算
    }    
    cout << n - cnt << '\n';
    return 0;
}

相关文章:

  • MQTT 服务器(emqx)搭建及使用(二)
  • 【原创】使用Golang和wails开发桌面程序初探
  • 基于CT成像的肿瘤图像分类:方法与实现
  • 多级限流防止 Redis 被打爆
  • Mysql-DQL
  • Docker学习--本地镜像管理相关命令--docker rmi 命令
  • bert自然语言处理框架
  • Senseglove:在虚拟现实训练中融入真实触感
  • day19 学习笔记
  • Electron崩溃问题排查指南
  • Redis 的缓存雪崩、击穿、穿透及其解决办法
  • Docker学习--容器的root文件系统(rootfs)命令--docker diff 命令
  • 2025最新云渲染网渲100渲染农场使用方法,渲染100邀请码1a12
  • HTTPS通信的加密问题
  • Groovy 规则执行器,加载到缓存
  • Minio集群部署
  • 大数据在金融服务中的中阶应用:从洞察到决策的技术进阶
  • 蓝桥杯 2023 省赛 B 组 I 题 - 景区导游题解(LCA最近公共祖先)
  • 水下成像机理分析
  • 输电线路在线监测通信规约,即I1协议
  • 蔡澜回应“入ICU观察”称未至于病危,助理:只是老毛病
  • 国家统计局:一季度全国规模以上文化及相关产业企业营业收入增长6.2%
  • 新华社评论员:汇聚起工人阶级和广大劳动群众的磅礴力量
  • 王星昊再胜连笑,夺得中国围棋天元赛冠军
  • 党旗下的青春|83岁仍在“下生活”,他说生活是创作的源泉
  • 王羲之《丧乱帖》在日本流传了1300年,将在大阪展23天