CF893B Beautiful Divisors 题解
Content
给定一个数 \(n\),求出 \(n\) 最大的可以表示成 \((2^k-1)\cdot2^{k-1}\) 形式的因数 \(x\)。
数据范围:\(1\leqslant n\leqslant 10^5\)。
Solution
数据范围很小,所以我们先考虑将 \(10^5\) 以内的能够表示成 \((2^k-1)\cdot2^{k-1}\) 形式的数全部通过打表生成出来。而且打完以后,我们发现,事实上满足这个条件的数在 \(10^5\) 以内只有 \(8\) 个:\(1,6,28,120,496,2016,8128,32640\)。
然后输入完 \(n\),就直接从 \(n\) 开始往 \(1\) 直接枚举,一旦找出了可以表示成 \((2^k-1)\cdot2^{k-1}\) 的因数就直接输出即可。
Code
int num[17], n, cnt, vis[200007];
int main() {
while(num[cnt] <= 100000) ++cnt, num[cnt] = (1 << (2 * cnt - 1)) - (1 << (cnt - 1));
F(int, i, 1, cnt) vis[num[i]] = 1;
n = Rint;
R(int, i, n, 1) if(vis[i] && !(n % i)) return write(i), 0;
return 0;
}

浙公网安备 33010602011771号