c语言中欧几里得算法求最大公约数,欧几里得算法求最大公约数和最小公倍数...

欧几里德算法又称辗转相除法,可用于计算两个正整数的最大公约数。而对于两个正整数的最小公倍数呢,有这样一个定理:

对于两个正整数 a 和 b,有gcd(a, b) * lcm(a, b) == a * b。

下面看具体的实现代码:

/*

* 求解最大公约数(递归实现)

*/

public static int gcd(int a, int b) {

if (a < 0 || b < 0)

return -1;

if (b == 0)

return a;

return gcd(b, a % b);

}

/*

* 求解最大公约数(非递归实现)

*/

public static int gcd1(int a, int b) {

int temp;

while (a % b != 0) {

temp = a % b;

a = b;

b = temp;

}

return b;

}

/*

* 求解最小公倍数 定理:对于两个正整数 a和 b,有gcd(a, b) * lcm(a, b) == a * b

*/

public static int lcm(int a, int b) {

if (a < 0 || b < 0)

return -1;

return a * b / gcd(a, b);

}

对于求三个及以上正整数的最小公倍数,我们可以先求出其中两个数的最小公倍数,再求这个最小公倍数与另个一数的最小公倍数,这样下去最后的结果将是这组数的最小公倍数。

设计思路:

声明一个数组a[n]来存n个要求最小公倍数的正整数,从a[1]开始的每一个a[ i ],求a[ i ] = lcm( a[ i ],a[ i - 1 ] ),依次求下去,最后一步是a[n-1] = lcm( a[n-1],a[n-2] )。a[n - 1]也就是所求结果。具体代码如下:

/*

* 求解正整数数组a中所有元素的最小公倍数

*/

public static int f(int[] a) {

for (int i = 1; i < a.length; i++) {

a[i] = lcm(a[i], a[i - 1]);

}

return a[a.length - 1];

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值