题目链接

A. Candies


解题思路

题目要求根据给出的n来求出kx,由{x+2x+4x+⋯+2^{k−1}}x=n可知

x * {2^k}-1 = n(使用等比数列求和公式推出)

又因为题目描述 {n(3 \le n \le 10^9)}

所以说可以确定 {k(2 \le k \le 30)}

最后循环暴力计算x即可


AC代码

//https://codeforces.com/contest/1343/problem/A
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
    int t;
    scanf("%d",&t);
    for(int i=0;i<t;i++){
        ll n;
        scanf("%lld",&n);
        for(int i=1;i<30;i++){
            ll num = (2<<i)-1;
            if(n%num==0){
                printf("%lld\n",n/num);
                break;
            }
        }
    }
    return 0;
}

一只小菜鸡