先来看一下题目:
题目链接:https://vjudge.net/problem/HDU-2504
题目中说a,c的最大公因数是b。现已知a,b求c,则c肯定从b开始向a逼近,即b,2b,3b,4b…,而题目要求b!=c,故从2b开始循环,每次加b,所以我们先用gcd算法求出a,b的最大公约数,如何如下图的循环来枚举i,判断是否等于a,b的最大公约数,如果等于则说明现在的i就是我们要求的c。
for(i=2*b;i<a;i+=b)
{
if(gcd(a,i)==b)
{
printf("%d\n",i);
break;
}
}
AC代码:
#include<stdio.h>
int gcd(int a,int b) //用gcd算法求出a与b的最大公约数
{
if(b==0)
{
return a;
}
else
{
return gcd(b,a%b);
}
}
int main()
{
int a,b,c,i,n;
scanf("%d",&n);
while(n--)
{
scanf("%d %d",&a,&b); //输入a,b
for(i=2*b;i<a;i+=b)
{
if(gcd(a,i)==b)
{
printf("%d\n",i);
break;
}
}
}
return 0;
}