一、最大公约数与最小公倍数(GCD,LCM)
输入两个正整数m,n,求它们的最大公约数与最小公倍数
法一:枚举法
源代码:
#include <stdio.h>
void fun(int m,int n)
{
int i;
int gcd,lcm; //最大公约数与最小公倍数
for(i=(m>n?n:m);i>=1;i--)
{
if(m%i==0 && n%i==0)
{
gcd=i;
break;
}
}
lcm=m*n/gcd;
printf("%d %d\n",gcd,lcm);
}
int main()
{
int m,n;
while(scanf("%d %d",&m,&n)!=EOF)
fun(m,n);
}
法二:辗转相除法
思想:(1)用较大的数m除以较小的数n,得到的余数存储到变量p中,即p=m%n;
(2)上一步中较小的除数n和得出的余数b构成新的一对数,并分别赋值给m和n,继续做上面的除法;
(3)若余数为0,其中较小的数(即除数)就是最大公约数,否则重复(1)(2)两步。
源代码:
#include <stdio.h>
void fun(int m,int n)
{
int p,q,t;
int gcd,lcm;
q=m*n;
if(m<n)
{
t=m;
m=n;
n=t;
}
while(n!=0) //接下来的循环中m为最大公约数,n为余数
{
p=m%n;
m=n;
n=p;
}
gcd=m;
lcm=q/gcd;
printf("%d %d\n",gcd,lcm);
}
int main()
{
int m,n;