题目链接
题目思路
首先考虑只有奇数,那么显然可以,因为奇数可以直接变为0
假如都是偶数偶数全部看成\(a[i]/2\)
那么最后就要满足$ (sum/2) % gcd == 0$ , 这些数的\(gcd\)至少是\(lowbit\) , 如果最小 l\(owbit\) 只有奇数个 那么 sum / 2
之后 肯定不是最小lowbit的倍数了
那么有奇数和有偶数得情况下,显然可以变为0
感觉这个好难解释,其实本质上就是利用裴蜀定理
代码
#include<bits/stdc++.h>
#define fi first
#define se second
#define debug cout<<"I AM HERE"<<endl;
using namespace std;
typedef long long ll;
const int maxn=2e5+5,inf=0x3f3f3f3f,mod=1e9+7;
const double eps=1e-6;
int n;
int a[maxn];
int cnt[maxn];
ll qw2[maxn];
signed main(){
scanf("%d",&n);
qw2[0]=1;
for(int i=1;i<=n;i++){
qw2[i]=qw2[i-1]*2%mod;
}
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
for(int j=30;j>=1;j--){
if(a[i]%(1<<j)==0){
cnt[j]++;
break;
}
}
}
ll ans=qw2[n]-1;
for(int i=1;i<=30;i++){
if(cnt[i]==0) continue;
int tmp=0;
for(int j=i+1;j<=30;j++){
tmp=tmp+cnt[j];
}
ans=(ans-qw2[cnt[i]-1]*qw2[tmp])%mod;
}
ans=(ans%mod+mod)%mod;
printf("%lld\n",ans);
return 0;
}