“欧几里得算法:欧几里德算法又称辗转相除法,是指用于计算两个正整数a,b的最大公约数。应用领域有数学和计算机两个方面。计算公式gcd(a,b) = gcd(b,a mod b)。”——百度百科
【注意,公式是gcd(a,b)=gcd(b,a mod b),不能是gcd(a,b)=gcd(a mod b,b)。否则会出问题。】
gcd.java:
package zdy.com.company;
public class gcd {
//计算两个非负整数p和q的最大公约数:
// 若q是0,则最大公约数为p。
// 否则,将p除以q得到余数r,p和q的最大公约数即为q和r的最大公约数。
public static int gcd(int p,int q){
if(q==0)return p;
int r = p % q;
return gcd(q,r);
}
}
【在这里,如果公式是gcd(a,b)=gcd(a mod b,b),即q≠0时return的是gcd(r,q),当传入的p=6,q=33时,会陷入死循环。】
Main.java:
package zdy.com.company;
import java.awt.*;
public class Main
{
public static void main(String args[]){
int i=0;
i=gcd.gcd(6,33);//调用欧几里得算法计算6和33的公约数
System.out.print(i);
}
}
运行结果
运行结果.png
网友评论