注册 登录
编程论坛 C++教室

求两数的最大公约数

newyj 发布于 2008-09-11 21:25, 948 次点击
例:
int gcd(int v1,int v2){
  while(v2){
    int temp=v2;
    v2=v1%v2;     //这里为什么求模?
    v1=temp;         
  }
  return v1;   
}
能否讲解一下 这个的工作原理 尤其是
int temp=v2;
   v2=v1%v2;
   v1=temp;
5 回复
#2
blueboy820062008-09-11 21:27
你知道什么叫"辗转相除法"吗?
建议你看看...
纯属数学问题...
#3
newyj2008-09-11 21:44
哎 还真没听说过呢?
有没有 这方面的书啊(除了数据结构啊!)
#4
守鹤2008-09-11 22:00
可以看一下算法设计,上面讲述了许多算法
#5
夜风依旧2008-09-11 23:34
源于
a = bq + r
带余除法
(a,b) = m

(b,r) = m
依此类推,最终
(x,m) = m
#6
夜风依旧2008-09-11 23:36
最好这样写:
int gcd(int m,int n)
{
    while(n != 0)
    {
        m = m%n;
        if(m == 0)
             return n;
        n = n%m;
    }
    return m;
}
// 这样效率更高了
1