资源限制
时间限制:1.0s 内存限制:256.0MB
#include<bits/stdc++.h>
using namespace std;
long long n;
long long C(int a,int b)
{
long long sum=1;//计算组合数
for(int i=a,j=1;j<=b;i--,j++)
{
sum=sum*i/j;
if(sum>n)
{
return sum;
}
}
return sum;
}
bool check(int k)//二分法
{
long long l=2*k;
long long r=max(l,n);
while(l<r)
{
int mid=l+r>>1;
if(C(mid,k)>=n)
{
r=mid;
}
else
{
l=mid+1;
}
}
if(C(r,k)!=n)return false;
else
{
cout<<(long long)((1+r)*r/2+(k+1));
return true;
}
}
int main()
{
cin>>n;
for(int i=16;;i--)
{
if(check(i))break;
}
return 0;
}
参考