今天发现一个更好的方法,运用欧几里得算法,递归来求最大公约数。
可当做模板来记。
AC码1:直接求c
#include<cstdio>
int gcd(int a,int b) //欧几里德算法 辗转相除法
{
return b?gcd(b,a%b):a;
}
int main()
{
int n,a,b,c;
scanf("%d",&n);
while(n--)
{
scanf("%d%d",&a,&b);
for(c=b<<1; ;c+=b) //b<<1 相当于b*2 不过前者更快
if(gcd(a,c)==b)
break;
printf("%d\n",c);
}
return 0;
}
#include<stdio.h>
int gcd(int a,int b)
{
return b?gcd(b,a%b):a;
}
int main()
{
int a,b,i,j,t,d,n;
scanf("%d",&n);
while(n--)
{
scanf("%d%d",&a,&b);
d = a/b; //取a除以b的另一个因子
for(i=2;;i++)
if(gcd(d,i)==1) //a和c 除 b 外的两个因子必互斥 (即二者gcd等于1) c必为b的整数倍
break;
printf("%d\n",i*b);
}
return 0;
}