又见GCD |
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) |
Total Submission(s): 2464 Accepted Submission(s): 1217 |
|
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 26 212 4
|
Sample Output 48
|
解题思路
第一次做这个题我纠结了好久,真的是束手无策,后来马上就到结束时间了没办法就用了最笨的方法,将其模拟判断了一遍居然AC了,那一刻真的崩溃了,破题!
这个采取了模拟的方法,因为a,b,c都不想等,而a又最大,要求b,只能从c的倍数开始选择,因为只有这样才能确保a和b的最大公约数是c,那么就从i=2*c开始,每次都判断i和a的最大公约数是不是c,如果是则b==i,当然还要注意i!=a的情况。
代码
<span style="font-size:18px;">#include<stdio.h>
int gcd(int a,int b)
{
return b==0?a:gcd(b,a%b);
}
int main()
{
int n;
int a,c;
int i,j,k;
scanf("%d",&n);
while(n--)
{
scanf("%d%d",&a,&c);
for(i=c+c;;i+=c) //从 c的倍数开始选择判断
if(gcd(i,a)==c)//当然要排除 a!=i 的情况
if(i!=a)
break;
printf("%d\n",i);
}
return 0;
}
</span>