#include
//最大公约数
int gcd(int a,int b)
{
if (a > b)
{
a^=b;b^=a;a^=b;
}
return a > 0 ? gcd (b % a, a) : b;
}
//最小公倍数
int lcm(int a, int b)
{
int i;
if (a > b)
{
a^=b;b^=a;a^=b;
}
for (i = b; i % a != 0; i+= b);
return i;
}
int main()
{
int a,b;
while(scanf("%d%d",&a,&b) !=EOF)
{
printf("%d %d\n", gcd(a,b),lcm(a,b));
}
return 0;
}
举例:输入两个正整数m和n,输出它们的最小公倍数和最大公约数。
代码:
#include
int main(void)
{
int gcd, lcm, m, n;
int repeat, ri;
scanf("%d", &repeat);
for(ri = 1; ri <= repeat; ri++)
{
scanf("%d", &m);
scanf("%d", &n);
if(m <= 0 || n <= 0)
{ printf("m <= 0 or n <= 0");
continue;
}
for(gcd=m; gcd >= 1; gcd--){
if(m % gcd == 0 && n % gcd == 0) break;
}
lcm = m * n / gcd;
printf("%d, %d\n",lcm, m, n, gcd, m, n);
}
}
运行效果:
输入输出示例:括号内为说明
输入:
3(repeat=3)
37(m=3,n=7)
244(m=24,n=4)
2418(m=24,n=18)
输出:
21,1.
24,4.
72,6.
辗转相除法:
#include
int main()
{
int m,n;
scanf("%d %d",&a,&b); //输入两个整数
int num1,num2,c; //num1,num2作为计算时的变量,c作为中间变量
if(a>=b) {num1=a; num2=b; }
else {num1=b; num2=a; }//通过比较对num1和num2赋值,便于计算
while(num2>0){
c=num1%num2;
num1=num2;
num2=c;}//辗转相除,num2=0时,num1=最大公因数
printf("最大公因数:%d\n",num1);
printf("最小公倍数:%d\n"m*n/num1);
return 0;
}