如何快速求最大公约数和最小公倍数

可以运用辗转相除法,

即:(326,78)=(78,326%78);

        (78,14)  =(14,78%14);

        (14 ,,8 ) =(8,14%8);

          (8,6)    =(6,8%6);

          (6,,2)   =  (2,,6%2=0);

此时结束;这个时候2就是最大公约数

所用原理是:

1:(a,b)=(a,ka+b),其中a、b、k都为自然数  就是说,两个数的最大公约数,将其中一个数加到另一个数上,得到的新数组,其公约数不变,比如(4,6)=(4+6,6)=(4,6+2×4)=2。这里有一个比较简单的证明方法来说明这个性质:如果p是a和ka+b的公约数,p整除a,也能整除ka+b。那么就必定要整除b,所以p又是a和b的公约数,从而证明他们的最大公约数也是相等的。  

 2:(0,a)=a  由这两个性质得到的,就是更相减损术:  (78,14)=(64,14)=(50,14)=(36,14)=(22,14)=(8,14)=(8,6)=(2,6)=(2,4)=(2,2)=(0,2)=2  基本上思路就是大数减去小数,一直减到能算出来为止。不过在平时的计算过程中,往往不必计算到最后一步,比如在上面的过程中,到了(8,6),就已经能够看出其结果。  我们可以看到,在上面的过程中,由 (78,14)到(8,14)完全可以一步到位,因为(78,14)=(14×5+8,14)=(8,14),由此就诞生出我们的辗转相除法。

最小公倍数等于,把这两个数用最大公约数除得到的商相乘,再乘以最大公约数,就得到最小公倍数;

#include <stdio.h>
int main()
{
	int a,b,c,d,m,n;
	scanf("%d %d",&a,&b);
	m=a;n=b;
	while(1){//循环的辗转相除法 
		c=a%b;
		a=b;
		b=c;
		if(b==0){
			break;
		}
	}
	c=m/a;d=n/a;//最小公倍数
	n=c*d*a; //的算法 
	printf("%d %d\n",a,n);//循环的辗转相除法的结果 
	return 0;
}


  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值