HDU-2504 又见GCD
;HDU-2504 又见GCDProblem
Description
有三个正整数a,b,c(0<a,b,c<10^6),其中c不等于b。若a和c的最大公约数为b,现已知a和b,求满足条件的最小的c。
第一行输入一个n,表示有n组测试数据,接下来的n行,每行输入两个正整数a,bOutput
输出对应的c,每组测试数据占一行。
Sample Input
2 6 2 12 4
Sample Output
4 8
做题思路:
一看到题,我就马上傻傻地想到 c=2*b ,就这样我一直wa了七八遍!!!
不甘心啊!于是我就开始测试数据,发现
a b c
12 2 4 错了!
12 4 8 错了!!
................. 错了!!!
................. 错了!!!!
通过查阅数学资料得知:A 和 C的最大公约数为B的充要条件是::A=x*B,C=y*B; (x,y,A,B,C均是整数且想,y互质)
C++代码如下:
#include<iostream> using namespace std; int gcd(int a,int b) {return b==0? a:gcd(b,a%b); } int main() { int t,a,b,c; while(scanf("%d",&t)!=EOF) { while(t--) { scanf("%d%d",&a,&b); c=2*b; while(gcd(a,c)!=b) c+=b; printf("%d\n",c); } } return 0; }