给出某两个整数a和b(a<=b)的最大公约数GCD和最小公倍数LCM,请找出满足的a和b,使得b-a的值最小。
Input
输入数据只有一行,包括两个整数GCD和LCM。输入保证至少存在一组解。
Output
输出包含一个整数,为最小的b-a的值。
Sample Input
6 36
Sample Output
6
已知:
a=GCDaa;
b=GCDbb;
而GCD* aabb=LCM
所以LCM/GCD=aabb
然后判断一下aa和bb互质的情况且他俩差最小就好了。
#include<cstdio>
#include<cmath>
using namespace std;
int GCD,LCM,k;
bool hz(int aa,int bb){
int cc;
while(aa%bb!=0){
cc=aa%bb;
aa=bb;
bb=cc;
}
return bb==1;
}
int main(){
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
scanf("%d%d",&GCD,&LCM);
k=LCM/GCD;
for(int i=sqrt(k),j;i;--i){
j=k/i;
if(i*j==k&&hz(j,i)==1) {
printf("%d",(j-i)*GCD);
return 0;
}
}
fclose(stdin);
fclose(stdout);
}