CF689C Mike and Chocolate Thieves
题目大意
给定一个数 ,求最小的 ,使得存在恰好 个不同的等比数列 ,满足 。
解题思路
设等比数列为 ,其公比为 ,
则有 。
对于每个公比 ,首项 可以从 开始取,其间只需满足 ,即 。
通过移项可以得到 ,所以 的值可以取 的所有正整数,
所以此时就有 个满足条件的等比数列。
容易发现, 具有单调性,即 会随着 的变大而变大,又因为 的范围为 ,所以考虑二分答案 。
具体见代码。
CODE
#include <bits/stdc++.h>
using namespace std;
#define int long long
int n, l, r, mid, ans;
inline int check(int t)
{
int q, cnt = 0;
for (q = 2; q * q * q <= t; q++)
cnt += t / (q * q * q);
return cnt;
}
signed main()
{
scanf("%lld", &n);
l = 1;
r = 1e18;
while (l <= r)
{
mid = l + r >> 1;
if (check(mid) >= n)
{
ans = mid;
r = mid - 1;
}
else
l = mid + 1;
}
if (check(ans) == n)
printf("%lld", ans);
else
printf("-1");
return 0;
}
本文来自博客园,作者:蒟蒻orz,转载请注明原文链接:https://www.cnblogs.com/orzz/p/18122108