\(vv\) 有 \(n\) 个糖果,\(vv\) 记得这些糖果是按如下方式购买的:
- 第 \(i\) 天买了 \(2^{i - 1}x\) 个,总共买了 \(k\) 天,\(k > 1\) 。
但是 \(vv\) 忘了 \(x\) 是多少,询问任意一个满足条件的 \(x\) 。保证给出的 \(n\) 存在这样一个 \(x\) 。
显然,根据几何或二进制证明,有 \(\sum_{i=0}^{k-1} w^i = 2^k - 1\) 。于是 \((2^k - 1)x = n\) 。由于 \(n \leq 10^9\) ,则枚举 \(k \in [2, 30]\) ,查询一个 \(x\) 满足 \(x = \frac{n}{2^k - 1}\) 。
view
#include <bits/stdc++.h>
typedef long long ll;
void solve(){
int n; std::cin >> n;
// (2^k - 1)x = n
for (int i = 2; i <= 30; i++) if (n % ((1 << i) - 1) == 0) {
std::cout << n / ((1 << i) - 1) << '\n';
return;
}
}
int main() {
int _ = 1; std::cin >> _;
while (_--) {solve();}
return 0;
}