利用BigInteger方法中自带的gcd方法可以实现求两个数的最大公约数;
但是有一点我测试过,集合中传入0,0的时候返回的是0,其实照数学来说是不对的,因为0和0的最大公约数是所有的大于0的都可以,但是我们不考虑这个问题,尽量传入的是非0数;
public class GcdUtil {
/**
* 获取集合中元素的最大公约数
*/
public static int gcdList(List<Integer> list) {
//利用stream流遍历list中的元素
//reduce方法是消费list的元素,利用方法引用
//最后处理完后get方法获取处理完成后的结果
return list.stream().reduce(GcdUtil::gcd).get();
}
/**
* 利用BigInteger的gcd方法可以求两个数的最大公约数
*/
public static int gcd(int num1, int num2) {
BigInteger i1 = new BigInteger(String.valueOf(num1));
BigInteger i2 = new BigInteger(String.valueOf(num2));
return i1.gcd(i2).intValue();
}
}