CF Round 751 C题:
https://codeforces.com/contest/1602/problem/C
AC代码:
#include<bits/stdc++.h>
#define int long long
using 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);
else
gd = 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;
}