题目
https://ac.nowcoder.com/acm/contest/10746/F
分析
假设 (frac{(k+1)k}{2}leq n < frac{(1+(k+1))(k+1)}{2}),且 (m=n-frac{(1+k)k}{2})。每当不够减时,就要加一个 (m) ,直到达到 (m) 和 (k+1) 的倍数,且 (n) 相当于已经加了一个 (m) 。因此,答案为:(frac{lcm(m,k+1)}{k+1})。
代码
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
int t,n;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
int l=1,r=1e8;
while(l<=r)
{
int mid=(l+r)>>1;
if(1LL*(1+mid)*mid/2>n) r=mid-1;
else l=mid+1;
}
ll a=1LL*(1+r)*r/2;
ll b=n-a;
if(b==0) printf("1
");
else
printf("%lld
",1LL*(1+r)/__gcd(b,1LL*r+1));
}
return 0;
}