正题
大意
给出某对数a,b的gcd和lcm,然后求b-a的最小值
解题思路
我们定义A为gcd(a,b)gcd(a,b),B为lcm(a.b)lcm(a.b)
首先我们拿出推lcm的公式
B=ab/AB=ab/A
然后移项得
ab=AB(A≤a,b≤B)ab=AB(A≤a,b≤B)
之后我们就可以枚举了。首先因为只有 AA的倍数才可能等于 AA,所以我们枚举的时候可以一次增加,然后就可以了。
代码
#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);
}