给定两个数 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)
算法的原型来自 欧几里德的《几何原本》(第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)