您的位置:首页 > 其它

最大公约数-辗转相除法

2008-06-19 17:29 155 查看
给定两个数 a,b, (a > b) 求 a ,b的最大公约数 gcd(a,b)。

算法的原型来自 欧几里德的《几何原本》(第VII卷,命题i和ii)中。

原理是:

若 r 是 a ÷ b 的余数, 则 gcd(a,b) = gcd(b,r)

这样程序就好写了。

int gcb(int a,int b)

{

int r = 0;

while (b)

{

r = a%b;

a = b;

b = r;

}

return a;

}

很简单的东西。这个题目是在看另外一道题目的时候遇到的 “如何在程序里精确地表示一个小数”。答案是:表示成分数。 于是就有了求最大公约数的问题了。

ps: 无限循环小数 0.nnnnn(n) ,这里单n 循环,可以表示成 n/9 (0.9(9) = 1)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: