using namespace std;
long long n;
long long C(int a, int b) //C(a,b)
{
long long res = 1;
for (int i = a, j = 1;j <= b;--i, ++j)
{
res = res * i / j;
if (res > n) return res;//防止超过n直接爆long long,提前退出
}
return res;
}
int main()
{
cin >> n;
if (n == 1)//因为C(2,1)不存在,需要特判
{
cout << 1 << endl;
return 0;
}
for (int i = 16;i >= 1;--i)
{
long long l = 2 * i, r = max(l, n);//有可能l比n大
while (l < r)//二分查找左端点
{
long long mid = (l + r) >> 1;
if (C(mid, i) < n) l = mid + 1;
else r = mid;
}
if (C(l, i) == n)
{
cout << (l + 1) * l / 2 + i + 1 << endl;
return 0;
}
}
return 0;}
0 回复
0 转发
0 喜欢
1 阅读



