如何计算两个数的最大公约数?

直接代码:
public class Test {
public static long gcd(long m,long n){
while (n!=0){
long rem=m%n;
m=n;
n=rem;
}
return m;
}

public static void main(String[] args) {
long a=gcd(377,319);
System.out.println(a);
}
}

求最大公约数 辗转相除法(欧几里德算法)
例如,求(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。       
* 用辗转相除法求几个数的最大公约数,可以先求出其中任意两个数的最大公约数,再求这个最大公约数与第三个数的最大公约数,依次求下去,直到最后一个数为止。  
* 最后所得的那个最大公约数,就是所有这些数的最大公约数。 
posted @ 2018-08-08 19:41  随心—所欲  阅读(1512)  评论(0编辑  收藏  举报