CF Round 751 C题:
https://codeforces.com/contest/1602/problem/C
AC代码:
#include<bits/stdc++.h>#define int long longusing namespace std;const int N = 2e5+5;bitset<32> bs[N];int a[N];vector<int> get_divisors(int n)//求约数{vector<int> ans(0);for (int i=1;i<=n/i;i++)if(n%i==0){ans.push_back(i);if(i!=n/i)ans.push_back(n/i);}sort(ans.begin(),ans.end());return ans;}signed main(){int t;cin>>t;while(t--){int n;cin>>n;for (int i=1;i<=n;i++){cin>>a[i];bs[i] = a[i];//bitset可以直接赋值,转换为二进制存入bitset变量中}int gd;for (int j=0;j<30;j++){int x = 0;for (int i=1;i<=n;i++){if(bs[i][j])x++;}if(j)gd = __gcd(gd,x);elsegd = x;}if(gd==0){for (int i=1;i<=n;i++)cout<<i<<" ";cout<<endl;continue;}vector<int> ans = get_divisors(gd);for (auto it: ans)cout<<it<<" ";cout<<endl;}return 0;}
