又见GCD
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 9989 Accepted Submission(s): 4160
Problem Description
有三个正整数a,b,c(0<a,b,c<10^6),其中c不等于b。若a和c的最大公约数为b,现已知a和b,求满足条件的最小的c。
Input
第一行输入一个n,表示有n组测试数据,接下来的n行,每行输入两个正整数a,b。
Output
输出对应的c,每组测试数据占一行。
Sample Input
2 6 2 12 4
Sample Output
4 8
#include<stdio.h>
int gcd(int n,int m) //欧几里得算法 也可以用递归形式 本质上是一样的
{
int a;
while(m)
{
a = n%m;
n = m;
m = a;
}
return n;
}
int main()
{
int a,b,c,i,n;
scanf("%d",&n);
while(n--)
{
scanf("%d%d",&a,&b);
<span style="white-space:pre"> </span>for(i=2;;i++)<span style="white-space:pre"> </span> // i不需要限定范围
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>if(gcd(a,i*b) == b)
<span style="white-space:pre"> </span>break;
<span style="white-space:pre"> </span>}<span style="white-space:pre"></span>
printf("%d\n",i*b);
}
return 0;
}
开始就想到辗转相除法 可是怎么都做不出来 做题的范围还是太狭隘
看到别人不停的AC 自己却不断“哇(WA)"
深深感觉到自己知道的太少 要学的还有太多
人一旦飘起来 就很难再沉下去
所以 不气馁 有召唤 爱自由