正题
大意
给出某对数a,b的gcd和lcm,然后求b-a的最小值
解题思路
我们定义A为
,B为
首先我们拿出推lcm的公式
然后移项得
之后我们就可以枚举了。首先因为只有 的倍数 才可能等于 ,所以我们枚举的时候可以一次增加 ,然后就可以了。
代码
#include<cstdio>
#include<algorithm>
#define minx(x,y) x>y:y?x
using namespace std;
long long A,B,C,mins;
int main()
{
scanf("%lld%lld",&A,&B);
C=A*B;mins=1e18;
for (long long i=A;i<=B;i+=A)
{
long long w=C/i;
if (i>w) break;
if (i*w==B*A&&__gcd(i,w)==A)
{
mins=min(mins,abs(C/i-i));
}
}
printf("%lld",mins);
}