您的位置:首页 > 其它

求两数最大公约数

2013-10-18 15:41 288 查看
可以使用穷举法:

int func(int x,int y)//返回x和y的最大公约数

{

int z;

x<y?z=x:z=y;

while(1)

{

if(x%z==0 && y%z==0)

return z;

z--;

}

}

效率太差。

使用辗转相除法

辗转相除法原理:两个整数的最大公约数等于其中较小的数和两数的相除余数的最大公约数。

辗转相除法是利用以下性质来确定两个正整数 a 和 b 的最大公因子的:
1. 若 r 是 a ÷ b 的余数,则
gcd(a,b) = gcd(b,r)
2. a 和其倍数之最大公因子为 a。
另一种写法是:
1. a ÷ b,令r为所得余数(0≤r<b)
若 r = 0,算法结束;b 即为答案。
2. 互换:置 a←b,b←r,并返回第一步

Java语言如下:



public static int gcd(int m, int n) {
while (true) {
if ((m = m % n) == 0)
return n;
if ((n = n % m) == 0)
return m;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: