先来看一下题目:

题目链接: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;
}
该博客介绍了一个利用最大公约数(GCD)解决数学问题的算法。通过计算两个整数a和b的GCD,然后从2倍的GCD开始循环,寻找满足条件的c(c != b且gcd(a, c) = b),最终找到的c即为所求。代码示例展示了如何用C语言实现这个算法,并通过循环遍历和GCD计算找出满足条件的c值。

198

被折叠的 条评论
为什么被折叠?



