C语言经典题:求两个数的最大公约数以及最小公倍数

时间:2021-02-28 00:35:42

简要概述:最大公约数为两个或多个整数共有约数最大的一个 ;最小公倍数为两个或多个整数公有的倍数,其中除0以外最小的一个公倍数称为这几个数的最小公倍数。

设两个正整数m,n,它们的最大公约数为p,最大公倍数为q,则mn=pq;

初始化操作:

    int m,n,x=1,temp,y=0,i;
    printf("Please enter two numbers[format:x,y]:");
    scanf("%d,%d",&m,&n);
    x=m*n;

1.利用辗转相除法求最大公约数以及最小公倍数    

     if(m<n){
temp=m;
m=n;
n=temp;
}
while(n!=0){
temp=n;
n=m%n;
m=temp;
}
x=x/m;
printf("1.greatest common divisor:%d,least common multiple:%d\n",m,x);

2.利用更相减损法求最大公约数以及最小公倍数

    while(m!=n){ //利用大数减去小数的原理,当m=n时说明此时已经得到最大公约数

if(m>n){
m-=n;
}else{
n-=m;
}
}
x=x/m; //最小公约数,利用两个数相乘在除以最大公约数

printf("2.greatest common divisor:%d,least common multiple:%d\n",m,x);

3.利用穷举法求最大公约数以及最小公倍数

        temp=m;
if(m>n){
temp=n;
}
for(i=1;i<=temp;i++){
if(m%i==0 && n%i==0){
y=i;
}
}
x=x/y;
printf("3.greatest common divisor:%d,least common multiple:%d\n",y,x);