1046: QAQ的数学问题
时间限制: 1 Sec 内存限制: 128 MB
提交: 59 解决: 10
[提交][状态][讨论版]
题目描述
QAQ很喜欢数学,尤其对LCM
(最小公倍数)很感兴趣。
对于数对(6,10),可以得出LCM(6,10)=30。为了让LCM的值最小化,他尝试把6和10全部加上2,这样得到LCM(8,12)=24<30。
经过无数次的尝试,QAQ发现总是可以通过上面相加的方式(必须加的是非负整数)让LCM
的值达到最小的,但是他忘记至少需要加多少了,所以你来请帮帮他吧。
输入
第一行输入一个整数T
,代表有T组测试数据。
每组数据输入两个整数A,B
,分别代表上面提到信息。
注:1<=T<=2000,1<=A,B<=2000000000
。
输出
对每组数据,输出一个结果,代表QAQ至少需要加的数。
样例输入
3
6 10
4 10
3 10
样例输出
2
2
4
代码可以再优化~~~
AC代码 :
#include<cstdio>
typedef long long LL;
int main()
{
int T;
LL a,b,c;
scanf("%d",&T);
while(T--){
scanf("%lld %lld",&a,&b);
if(a > b){
c = b; b = a; a = c;
}
c = b - a;
if(c == 0)
printf("0\n");
else if(c > a){
LL cut = 0;
while(c % a)
cut++,a++;
printf("%lld\n",cut);
}
else{
LL t = a / c;
if(a % c)
t++;
printf("%lld\n",c * t - a);
}
}
return 0;
}