https://codeforces.com/problemset/problem/1343/A

思路:

对于公式 x + 2x + 4x + ... + 2^(k-1)x = n,我们可以将其可以转化为 x((1 << k) - 1) = n。 由于直接枚举 x 会导致时间复杂度过高,于是我们枚举 k.

代码实现:

#include <iostream>
using namespace std;

int k, n;
int main () {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cin >> k;
    while (k--) {
        cin >> n;
        for (int k = 2; k < 30; ++k) {
            int temp = ((1 << k) - 1);
            if (!(n
                cout << n / temp << endl;
                break;
            }
        }
    }
    return 0;
}
分类: Thought

0 条评论

发表回复

Avatar placeholder

您的电子邮箱地址不会被公开。 必填项已用*标注

友情链接:Ctips' blog, Colza’s blog

站点状态:Status