在一般的程序设计书里面,都有关于求两个数的最大公因数的算法(或者叫做最大公约数)。求两个数的最大公约数算法用的最多的是辗转相除法。
基本思路就是
getCommonMutiple(a,b){ //这里假定a 是较大的数,实际编码时要先判断谁大谁小;
r = a%b;
if(r != 0){
a = b;
b = r;
getCommonMutiple(a ,b);
}
return b;
}
但是如何求N个数的最大公因数呢?(N > 1)
在初等数学里,有这么几个定理
1、任何一个整数,都可以分解为素数因子的乘积
比如
24 = 2* 2* 2 * 3;
26 = 2 * 13;
分解时应该从2开始分解起
2、若干个数的最大公因数是共同素数因子的乘积
比如 求 48 60 72 的最大公因数
48 = 2*2*2*2*3
60 = 2*2*3*5
72 = 2*2*2*3*3
共同的素数因子为 2 * 2 * 3 = 12 所以他们的最大公因数就是12
有了这两个知识点之后,我们开始写程序
详见代码
/**
*Aug 25, 2013
*Copyright(c)JackWang
*All rights reserve
*@Author <a href="mailto:wangchengjack@163.com">JackWang</a>
*/
package com.example.blog;
import java.util.ArrayList;
import java.util.List;
/**
* 计算机里求最大公因数的方法通常是辗转相除法
* 但是这个方法的缺陷在与一次只能求两个数的最大公因数
* 如果需要求若干个数的最大公因数呢?
* 需求