java欧几里得算法求最大公约数
2013-03-18 19:30
288 查看
public class Euclid { /** * @param args */ public static void main(String[] args) { System.out.println(euclid(100, 10)); System.out.println(euclid(454, 24)); System.out.println(euclid(1020, 104)); System.out.println(euclid(1020, 105)); System.out.println(euclid(1024, 644)); System.out.println(euclid(1111111, 1234567)); System.out.println(euclid(100, 1203000)); } public static int euclid(int first, int second) { if (first <= 0 || second <= 0) { throw new IllegalArgumentException(); } if(first < second) { int temp = second; second = first; first =temp; } int temp = first % second; if (temp == 0) { return second; } else { return euclid(second, temp); } } }
欧几里德算法又称辗转相除法,用于计算两个正整数a,b的最大公约数。其计算原理依赖于下面的定理:
定理:gcd(a,b) = gcd(b,a mod b) (a>b 且a mod b 不为0)
证明:a可以表示成a = kb + r,则r = a mod b
假设d是a,b的一个公约数,则有
d|a,d|b,而r = a - kb,因此d|r
因此d也是(b,a mod b)的公约数
因此(a,b)和(b,a mod b)的公约数是一样的,其最大公约数也必然相等,得证
相关文章推荐
- Java程序实现欧几里得算法-计算两个数的最大公约数
- Java实现算法导论中最大公约数欧几里得算法
- 用java实现欧几里得算法求两个数字的最大公约数
- java之两个数求最小公倍数与最大公约数
- 2011级Java第1周(春)项目——一求两个整数的最大公约数的程序
- 【Java 函数调用】SDUT-1131 C/C++训练1---最大公约数与最小公倍数
- Java输入两个正整数m和n,求其最大公约数和最小公倍数。
- java求多个数的最大公约数,最小公倍数。
- 欧几里得算法与最大公约数
- java求两个数最大公约数
- 欧几里得算法求解最大公约数
- HDU 5050 Divided Land(最大公约数Java)
- JAVA辗转相除求最大公约数
- c++实现用欧几里得算法求两个整数的最大公约数
- Java 数据结构与算法(1)-------------求最大公约数
- 【java最大公约数和最小公倍数】
- Java实例15 - 求最大公约数 gcd 辗转相除 欧几里德算法
- java实现计算两个整数的最大公约数代码及附图
- 欧几里得算法求两个正整数的最大公约数
- 筛法求素数,欧几里得算法求最大公约数