给我调红温了。。。
#include<bits/stdc++.h>
const int N =1e5+10;
#define int long long
using namespace std;
int a[N];
int n;
int cnt[50];
int ans;
int res;
signed main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
cnt[0] = 1;
for(int i=1;i<=n;i++){
int x = a[i];
int c = res;
int p = 2;
while(x != 1){
if(x % p == 0){
x /= p;
res ^= p;
}else p++;
}
cnt[res]++;
}
for(int i=0;i<=30;i++){
ans += (cnt[i] - 1)*cnt[i] / 2;
}
cout<<ans<<endl;
return 0;
}
也是普通的质因数分解并异或,但是只有20分,求不对的数据