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;
}
posted @ 2021-12-15 22:14  Eason_AC  阅读(111)  评论(0)    收藏  举报