CF Round 751 C题:
    https://codeforces.com/contest/1602/problem/C
    AC代码:

    1. #include<bits/stdc++.h>
    2. #define int long long
    3. using namespace std;
    4. const int N = 2e5+5;
    5. bitset<32> bs[N];
    6. int a[N];
    7. vector<int> get_divisors(int n)//求约数
    8. {
    9. vector<int> ans(0);
    10. for (int i=1;i<=n/i;i++)
    11. if(n%i==0)
    12. {
    13. ans.push_back(i);
    14. if(i!=n/i)
    15. ans.push_back(n/i);
    16. }
    17. sort(ans.begin(),ans.end());
    18. return ans;
    19. }
    20. signed main()
    21. {
    22. int t;
    23. cin>>t;
    24. while(t--)
    25. {
    26. int n;
    27. cin>>n;
    28. for (int i=1;i<=n;i++)
    29. {
    30. cin>>a[i];
    31. bs[i] = a[i];//bitset可以直接赋值,转换为二进制存入bitset变量中
    32. }
    33. int gd;
    34. for (int j=0;j<30;j++)
    35. {
    36. int x = 0;
    37. for (int i=1;i<=n;i++)
    38. {
    39. if(bs[i][j])
    40. x++;
    41. }
    42. if(j)
    43. gd = __gcd(gd,x);
    44. else
    45. gd = x;
    46. }
    47. if(gd==0)
    48. {
    49. for (int i=1;i<=n;i++)
    50. cout<<i<<" ";
    51. cout<<endl;
    52. continue;
    53. }
    54. vector<int> ans = get_divisors(gd);
    55. for (auto it: ans)
    56. cout<<it<<" ";
    57. cout<<endl;
    58. }
    59. return 0;
    60. }