题目链接 https://codeforces.com/contest/1343/problem/A
AC代码
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int n,a,i,j,x;
cin>>n;
for(i=1;i<=n;i++)
{
cin>>a;
for(j=2;;j++)
{
x=(int)(pow(2,j)-1);
if(!(a%x))
{
cout<<a/x<<endl;
break;
}
}
}
return 0;
}
分析:求整数x满足x+2x+4x+⋯+2^(k-1)x=n.
即x*(1+2+4+⋯+2^(k-1))=n,
也即x*(2^k-1)=n.
因为k>1,所以k从2开始枚举,直到满足n是2^k-1的整数倍。