两数的最大公约数和最小公倍数

来源:互联网 发布:手机熊猫抢福袋软件 编辑:程序博客网 时间:2024/06/14 13:03

最大公约数

方法一:辗转相除法

思路:欧几里得算法。其证明待学习。

(1)非递归实现
#include <stdio.h>int main(void){    int a,b,e,r;    scanf("%d%d",&a,&b);    if(a<b){        e=b;        b=a;        a=e;    }    while(a%b!=0){        r=a%b;        a=b;        b=r;    }    printf("%d",b);     return 0;}
(2)递归实现
#include <stdio.h>int GCD(int a,int b){    /*if(a%b==0){        return b;    }      else{        return GCD(b,a%b);    }*/    return a%b==0?b:GCD(b,a%b);}int main(void){    int a,b;    scanf("%d%d",&a,&b);    if(a<b){        int e;        e=a;a=b;b=e;    }    printf("%d",GCD(a,b));    return 0;}

方法二:穷举法

思路:两个数的最大公约数可能取到的最大值是两数之中较小的那个数,所以从较小的数开始尝试,如果是两个数的公约数,则跳出循环输出该数;如果不是两个数的公约数,则继续尝试比该数小1的数,一直尝试到1。

#include <stdio.h>int main(void){    int a,b,i;    scanf("%d%d",&a,&b);    if(a>b){        int e;        e=a;        a=b;        b=e;    }    for(i=a;i>1;i--){        if(a%i==0&&b%i==0){            break;        }    }    printf("%d",i);    return 0;}


最小公倍数

思路:两数的最小公倍数等于两数相乘后除以其最大公约数所得值。因此核心依然是计算最大公约数,不再赘述。

原创粉丝点击