CF1110C Meaningless Operations

Posted wangyiming

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CF1110C Meaningless Operations相关的知识,希望对你有一定的参考价值。

思路:

令x为满足2<= a的最大的x。如果a的二进制表示中包含0,则将b构造为(2x+1 - 1) ^ a即可;否则gcd(a ^ b, a & b) = gcd(2x+1 - 1 - b, b) = gcd(2x+1 - 1, b),要令此式最大,b应为(2x+1 - 1)的最大非平凡因子。

实现:

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 
 4 inline int max_fac(int x)
 5 {
 6     for (int i = 2; i * i <= x; i++)
 7     {
 8         if (x % i == 0) return x / i;
 9     }
10     return 1;
11 }
12 
13 int main()
14 {
15     int q, x;
16     set<int> st;
17     for (int i = 1; i <= 25; i++) st.insert((1 << i) - 1);
18     while (cin >> q)
19     {
20         for (int i = 0; i < q; i++)
21         {
22             cin >> x;
23             if (st.count(x))
24             {
25                 cout << max_fac(x) << endl;   
26             }
27             else
28             {
29                 int tmp = 0, y = x;
30                 while (y) { y >>= 1; tmp++; }
31                 cout << (1 << tmp) - 1 << endl; 
32             }
33         }
34     }
35     return 0;
36 }

 

以上是关于CF1110C Meaningless Operations的主要内容,如果未能解决你的问题,请参考以下文章

CF - 1110 C Meaningless Operations

CF-1110C-Meaningless Operations

Codeforces 833A The Meaningless Game

C. Meaningless Operations Codeforces Global Round 1 异或与运算,思维题

Meaningless Sequence Gym - 102832D

Codeforces 833A The Meaningless Game - 数论 - 牛顿迭代法 - 二分法