GCD与LCM
给出nnn和mmm求出最大公约数是nnn,最小公倍数是mmm,且差为最小的两个数的差
样例输入
6 36
样例输出
6
思路
可以想象,m=ab/nm=ab/nm=ab/n
然后移项,得nm=abnm=abnm=ab
最后枚举aaa,得出bbb
#include<algorithm>
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
long long n,m,k,x,y,ans=1e18;
int main()
{
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
scanf("%lld%lld",&n,&m);
for(int i=n;i<=m;i+=n)
{
long long a=(long long)i;
long long b=(long long)(n*m)/i;
if(a>b)break;//因为它可以分成两半,两半都是一样的,所以直接省略
if(a*b==n*m &&__gcd(a,b)==n)//防止出现没有整除//__gcd(a,b)是求a和b的最大公约数
ans=min(ans,b-a);//求最小差
}
printf("%lld",ans);
fclose(stdin);
fclose(stdout);
return 0;
}