『数论』求最大公因数

Posted nicoppa

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了『数论』求最大公因数相关的知识,希望对你有一定的参考价值。

//#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)) 证毕

以上是关于『数论』求最大公因数的主要内容,如果未能解决你的问题,请参考以下文章

数论考试题(b) 求约数的约数的最大个数

数论集合

初等数论初步——最大公因数

数论_筛法求素数

51nod 1179:最大的最大公约数

数论算法模板总结