最小公倍数和最大公约数
来源:互联网 发布:网络与信息安全教程 编辑:程序博客网 时间:2024/06/08 18:36
原理:欧几里得算法(gcd(a,b)=gcd(b,r),gcd表示求约数)
描述:两个数a,b的约数与b,r的约数相等。(其中r=a mod b,mod为取余)
证明:
设a=k*b+r,d为a,b的公约数。(其中r=a mod b,mod为取余)
则:r=a-k*b;
显然,d也为r的约数。
即证得:gcd(a,b)=gcd(b,r)。
a,b与b,r有共同约数,自然有共同的最大公约数。
两个数的最小公倍数为两数之积与两数最大公约数的商。(最小公倍数可表示为:K=A*B/gcd(A,B))
证明:
设A=a*x,B=b*x,其中X=gcd(A,B),那么a与b互质(如果a,b存在约数,那么X非最大公约数)。
则最小公倍数k=a*b*x;(K/A=b, K/B=a, 由已知a, b互质,则k最小。若a,b存在约数c,则k/c也是A,B的倍数)
显然k=A*B/x;
即证得:最小公倍数可表示为:k=A*B/gcd(A,B)
根据这一原理可用C语言求最小公倍数和最大公约数。
1.函数嵌套调用:
代码:
#include <stdio.h>int divisor(int a,int b) //自定义函数求a,b的最大公约数{ int temp,r; if(a<b) temp=a,a=b,b=temp; //a为a,b两者之间的较大者 while(b!=0) { r=a%b; a=b; b=r; } return a;}int multiple(int a,int b) //自定义函数求a,b的最小公倍数{ int temp; temp=divisor(a,b); return (a*b/temp);}int main(){ int a,b,max,min; //max为最大公约数,min为最小公倍数 scanf("%d %d",&a,&b); max=divisor(a,b); min=multiple(a,b); printf("%d %d\n",max,min); return 0;}
2.函数递归调用
代码:
#include <stdio.h>int gcd(int a,int b) //自定义函数求a,b的最大公约数{ if(a%b==0) return b; else return gcd(b,a%b);}int multiple(int a,int b) //自定义函数求a,b的最小公倍数{ int temp; temp=gcd(a,b); return (a*b/temp);}int main(){ int a,b,max,min,temp; //max为最大公约数,min为最小公倍数 scanf("%d %d",&a,&b); if(a<b) temp=a,a=b,b=temp; //a为a,b两者之间的较大者 max=gcd(a,b); min=multiple(a,b); printf("%d %d\n",max,min); return 0;}
0 0
- 2. 最大公约数和最小公倍数
- 求两数最大公约数和最小公倍数
- 最大公约数和最小公倍数
- 求最大公约数和最小公倍数
- 最大公约数和最小公倍数
- 最大公约数和最小公倍数
- 求最大公约数和最小公倍数
- 最小公倍数和最大公约数
- 最大公约数和最小公倍数
- 最大公约数和最小公倍数
- 求最大公约数和最小公倍数
- 最大公约数和最小公倍数算法
- 求最大公约数和最小公倍数
- 最小公倍数和最大公约数
- 最大公约数和最小公倍数
- 求最小公倍数和最大公约数
- 最大公约数和最小公倍数
- 最大公约数和最小公倍数
- SDK及工具类型的网站整理
- svn 可视化工具
- 《时代的变换》:现象、网络和时代变换的动力
- 灰度图像--形态学处理:腐蚀、膨胀、开操作、闭操作、顶帽、底帽等
- 关于为社么要用补码(转)
- 最小公倍数和最大公约数
- 通过Spring @PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作
- hibernate中java 的状态
- git init 和 git init --bare的区别
- storm运行异常之No output fields defined for component:stream XxxBolt:null
- Ubuntu搭建web服务器,Apache2+php5+MySql
- Java集合框架总结(4)——List接口的使用
- 【干货】国外程序员整理的 C++ 资源大全
- ajax异步请求,session超时处理