消减整数【lcm】
题目
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\n");
else
printf("%lld\n",1LL*(1+r)/__gcd(b,1LL*r+1));
}
return 0;
}