java实现gcd_java 三种方法实现最大公约数

本文介绍了Java中实现最大公约数(GCD)的三种方法:辗转相除法(欧几里得算法)、质因数分解法和更相减损术。通过实例代码详细展示了每种算法的实现过程,并提供了获取一个数所有因数的辅助方法。在示例中,使用了这些方法计算了32和48的最大公约数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import java.util.Collections;

import java.util.HashSet;

import java.util.Set;

public class GCD {

/**

* 求最大公约数 辗转相除法(欧几里德算法) 例如,求(319,377): ∵ 319÷377=0(余319)

* ∴(319,377)=(377,319); ∵ 377÷319=1(余58) ∴(377,319)=(319,58); ∵

* 319÷58=5(余29) ∴ (319,58)=(58,29); ∵ 58÷29=2(余0) ∴ (58,29)= 29; ∴

* (319,377)=29。 可以写成右边的格式。

* 用辗转相除法求几个数的最大公约数,可以先求出其中任意两个数的最大公约数,再求这个最大公约数与第三个数的最大公约数,依次求下去,直到最后一个数为止。

* 最后所得的那个最大公约数,就是所有这些数的最大公约数。

*

* @param m

* @param n

* @return

*/

public static int GCD(int m, int n) {

int result = 0;

while (n != 0) {

result = m % n;

m = n;

n = result;

}

return m;

}

/**

* 质因数分解法:把每个数分别分解质因数,再把各数中的全部公有质因数提取出来连乘,所得的积就是这几个数的最大公约数。 (小学学的方法)

*

* @param m

* @param n

* @return

*/

public static int PrimeGCD(int m, int n) {

int result = 1;

Set set1 = getFactor(m);

Set set2 = getFactor(n);

// 取交集

set1.retainAll(set2);

// 取最大

result = Collections.max(set1);

return result;

}

/**

* 更相减损术”,即“可半者半之,不可半者,副置分母、子之数,以少减多,更相减损,求其等也。以等数约之。”

* @param m

* @param n

* @return

*/

public static int equalGCD(int m, int n) {

while (m != n) {

if (m > n)

m -= n;

else

n -= m;

}

return m;

}

/**

* 获取某一数值的所有因数

*

* @param m

* @return

*/

private static Set getFactor(int m) {

Set set = new HashSet();

for (int i = 2; i <= m; i++) {

if (m % i == 0) {

set.add(i);

}

}

return set;

}

public static void main(String[] args) {

// int result = GCD(32, 48);

// int result = PrimeGCD(32, 48);

int result = equalGCD(32, 48);

System.out.println(result);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值