码迷,mamicode.com
首页 > 其他好文 > 详细

『数论』求最大公因数

时间:2019-10-21 11:36:45      阅读:62      评论:0      收藏:0      [点我收藏+]

标签:个数   证明   表示   pre   转化   def   fine   std   define   

//#define fre yes

#include <cstdio>

int gcd(int a, int b) {
    if(b != 0) gcd(b, a % b);
    else return a;
}

谈论数论不废话 ----- 辗转相除法求gcd

以上代码的时间复杂度为 \(O(\log n)\)

证明,为何 \(gcd(b, a \mod b) = gcd(a, b)\)

\(g = gcd(a, b)\) 那么一定有 \(a = xg , b = yg\) 我们又可以将 a 用 b 来表示,(任何数都可以用另外一个数表示) \(a = kb + r\)\(k\)\(a / b\) 的整数部分,\(r\)\(a / b\) 的余数部分 也就是 \(a \mod b\)),转化一下\(r = a - kb\) 那么将上面的 a, b 代入,也就变成了 \(r = xg - kyg = (x - ky)g\) 此时的 g 也是 r 的因数了,又因为 \(r\)\(a \mod b\) 所以 \(gcd(a, b) = gcd(b, a \mod b)\) 证毕

『数论』求最大公因数

标签:个数   证明   表示   pre   转化   def   fine   std   define   

原文地址:https://www.cnblogs.com/Nicoppa/p/11712072.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!