在一般的程序设计书里面,都有关于求两个数的最大公因数的算法(或者叫做最大公约数)。求两个数的最大公约数算法用的最多的是辗转相除法。基本思路就是
1 getCommonMutiple(a,b){//这里假定a 是较大的数,实际编码时要先判断谁大谁小; 2 3 r = a%b; 4 5if(r != 0){ 6 7 a = b; 8 9 b = r; 1011 getCommonMutiple(a ,b); 1213 } 1415return b; 1617 }
但是如何求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
有了这两个知识点之后,我们开始写程序
详见代码
1/** 2 *Aug 25, 2013 3 *Copyright(c)JackWang 4 *All rights reserve 5 *@AuthorJackWang6*/ 7package com.example.blog; 8 9import java.util.ArrayList; 10import java.util.List; 11 12/** 13 * 计算机里求最大公因数的方法通常是辗转相除法 14 * 但是这个方法的缺陷在与一次只能求两个数的最大公因数 15 * 如果需要求若干个数的最大公因数呢? 16 * 需求:设计一个算法,可以求出若干个整数的最大公因数 17 *@author Administrator 18 * 19*/ 20publicclass CommonMutiple { 21publicstaticvoid main(String[] args) { 22int[] data1 = {26,13}; 23int[] data2 =