思路:一个一个的找,因为c不等于b 且b是(a, c)的最大公约数, 所以c是b的整数倍, 每找到一个c就判断与 a的最大公约数是不是b,不是的话,就继续
刚开始的时候 居然把gcd非递归形式忘了。。。也没想用递归形式。。
2 6 2 12 4
4 8
#include<stdio.h> int gcd( int a, int b ) { int t = a%b; while( t ){ a = b; b = t; t = a%b; } return b; } int main() { int t, a, b, c, i; scanf( "%d", &t ); while( t -- ){ scanf( "%d%d", &a, &b ); for( i = b+b;;i+=b ) if( b == gcd(a, i ) ) break; printf( "%d\n", i ); // printf( "%d\n", gcd(a, b) ); } }
#include<stdio.h> int gcd(int a, int b) { if(b == 0) return a; else return gcd(b, a%b); } int main() { int t, a, b, c; scanf("%d", &t); while(t --){ scanf("%d%d", &a, &b); c= b*2; while(gcd(a, c) != b){ c+=b; } printf("%d\n", c); } return 0; }
hdoj 2504 又见GCD 【GCD判定】,布布扣,bubuko.com
原文:http://blog.csdn.net/shengweisong/article/details/38168921