题解:P10900 [蓝桥杯 2024 省 C] 数字诗意

· · 题解

思路

首先考虑等差数列求和,这里是题目是公差为一的等差数列,设第一个数是 n,最后一个是 m,我们能列出公式:

a_i=\frac{(n+m)\times(m-n+1)}{2}

我们要找到一个不能被连续数和表示的 a_i,移项有:

2a_i=(n+m)\times(m-n+1)

不能被表示,当且仅当 n=m,只能被自身表示,我们容易发现,n+mm-n+1 奇偶性不同,所以若能写成这种形式,一定是能分解成一个奇数乘一个偶数的形式,所以只要左边是 2^n 的形式,就一定不能被表示,否则一定能被表示。

CODE

短短的也很可爱。

#include<bits/stdc++.h>
using namespace std;
int n,ans;
#define int long long
signed main(){
    scanf("%lld",&n);
    for(int i=1;i<=n;i++){
        int x;
        scanf("%lld",&x);
        int p=log2(x);
        if((1ll<<p)==x){
            ans++;
        }
    }
    printf("%lld",ans);
}