加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

最小公倍数的程序

(2012-03-04 08:38:42)
标签:

最大公约数

最小公倍数

辗转相除法

正整数

余数

it

分类: Linux下C编程经典
   编写最小公倍数的程序。
   分析:正整数a、b的最小公倍数和最大公约数之间有关系,设正整数a、b的最大公约数为d,最小公倍数为c,则c=(a*b)/d。(存在调用)
    编写求最大公约数的函数,函数原型为:  int divisor(int a,int b) 返回最大公约数。
    编写求最小公倍数的函数,函数原型为:  int multiple(int a,int b) 返回最小公倍数。


#include <stdio.h>

int divisor(int a,int b){   //求最大公约数,使用辗转相除法
    int r;
    while((r=a%b)!=0){
        a = b;
           b = r;
    }
    return b;
}

int multiple(int a,int b){  //求最小公倍数
    int d;
    d = divisor(a,b);   //调用
    return a*b/d;
}

void main(){
    int a,b,c;
    printf("input a b:  ");
    scanf("%d%d",&a,&b);
    c = multiple(a,b);
    printf("最小公倍数为:c = %d\n",c);
}


辗转相除法.

  当两个数都较大时,采用辗转相除法比较方便.其方法是:

  以小数除大数,如果能整除,那么小数就是所求的最大公约数.否则就用余数来除刚才的除数;再用这新除法的余数去除刚才的余数.依此类推,直到一个除法能够整除,这时作为除数的数就是所求的最大公约数.

  例如:求4453和5767的最大公约数时,可作如下除法.

  5767÷4453=1余1314

  4453÷1314=3余511

  1314÷511=2余292

  511÷292=1余219

  292÷219=1余73

  219÷73=3

  于是得知,5767和4453的最大公约数是73.

  辗转相除法适用比较广,比短除法要好得多,它能保证求出任意两个数的最大公约数.

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有