首页 > 编程知识 正文

最大公约数短除法,程序设计最大公约数最小公倍数算法

时间:2023-05-06 12:33:09 阅读:39593 作者:2876

一、求最大公约数:zjdsy算法

zjdsy算法也称为换相除法,用于计算两个正整数a、b的最大公约数

其计算原理取决于以下定理:

定理:两个整数的最大公约数等于其中较小的一个数和除以两个数后剩下的最大公约数。 最大公约数缩写为gcd。

GCD(a,b )=gcd (b,a mod b ) )前提条件为a b且r=a mod b,r不为0 ) ) ) ) )。

c代码:

//两个数的最大公约数--zjdsy算法intgcd(inta,int b )//总是将较小的数放在b中的if(ab ) ) swap,b ); (if ) b==0) {返回a; }else{returngcd(b,a%b ); }

二、求最小公倍数

可以在已经计算出整数a、b最大公约数的基础上,通过下式求出它们的最小公倍数

LCM(a,b )=(a*b )/gcd(a,b ) ) ) ) ) )。

//a,b的最小公倍数intLCM(inta,int b ) returna*b/gcd,b ); }

三、求n个数的最大公约数

想法:把n个作为一个数组保存,把自变量作为数组的指针和数组的大小(应该计算的个数),首先求出gcd(a[0],a[1] ),然后把求出的gcd和数组的下一个要素作为gcd的自变量继续求出gcd

c代码:

int ngcd(int*a,intn ) if ) n==1)返回* a; 返回gcd (a (a [ n-1 ],ngcd ) a,n-1 ); }

四.求n个最小公倍数

思路:算法过程与n个最大公约数的求解方法相似,通过求解前两个最小公倍数,然后对下一个元素求解最小公倍数,产生求解一个地盒nlcm的算法

c代码:

int nlcm(int*a,intn ) if ) n==1)返回* a; 电子返回LCM (a [ n-1 ],nlcm(a ) a,n-1 ); }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。