Codeforces Round 636 (Div. 3) A. Candies

发布时间 2023-10-16 17:00:33作者: zsxuan

\(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;
}