关闭

求2个数的最大公约数--欧几里德算法

1064人阅读 评论(0) 收藏 举报
欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。其计算原理依赖于下面的定理:
定理:gcd(a,b) = gcd(b,a mod b)
证明:a可以表示成a = kb + r,则r = a mod b
假设d是a,b的一个公约数,则有 d|a, d|b,而r = a - kb,因此d|r 因此d是(b,a mod b)的公约数

假设d 是(b,a mod b)的公约数,则 d | b , d |r ,但是a = kb +r ,因此d也是(a,b)的公约数 因此(a,b)和(b,a mod b)的公约数是一样的,其最大公约数也必然相等,得证

void swap(int & a, int & b)
   {
       int c = a;
       a = b;
       b = c;
   }
   int gcd(int a,int b)
   {
       if(0 == a )
       {
           return b;
       }
       if( 0 == b)
       {
           return a;
       }
       if(a > b)
       {
           swap(a,b);
       }
       int c;
       for(c = a % b ; c > 0  ; c = a % b)
       {
           a = b;
           b = c;
       }
       return b;
   }

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:20072次
    • 积分:289
    • 等级:
    • 排名:千里之外
    • 原创:7篇
    • 转载:6篇
    • 译文:0篇
    • 评论:6条
    最新评论