洛谷网校:数论(一)

2020.1.29

数论(一)

1.引入

一开头讲了整除,质数,合数,质因数分解,带余除法,两数同余等小学基础知识,不加赘述。

有关推论:

1.约数总是成对出现

若 k 是 n 的约数, 则 (n/k) 也是 n 的约数。 在一对约数中,必有一个不大于 √ n,另一个不小于 √ n。 因此枚举 1..√ n 就能求出 n 的所有约数。

2.整除的表示

a|b表示:b%a=0

3.同余的表示

a ≡ b(mod c) 与 c|(a − b) 等价,表示:a%c=b%c

2.最大公约数

gcd(a,b)=gcd(a,a+b)=gcd(a,ka+b)

gcd(ka,kb) = k·gcd(a,b)

gcd(a,b,c)=gcd(gcd(a,b),c)

3.欧几里得算法(辗转相除法)

a>=b的前提下

由gcd(a,b)=gcd(a,ka+b)推得:gcd(a,b)=gcd(b,a%b)(k为a/b(整除)的相反数)

所以每次较大数都减少至少一半(取模运算,易证)

所以时间复杂度为O(log~2~n)

4.裴蜀定理

若d=gcd(a,b),则对任意整数x,y有d|(ax + by)成立(理所当然地成立)

且一定有x,y满足ax+by=d(18和24:gcd(18,24)=6,(-1)·18+(1)·24=6)

5.扩展欧几里得算法

给上面的裴蜀定理推论的方程 ax+by=d 求解

考虑使用欧几里德算法的思想

d=gcd(a, b),令a=bq+r,r=a%b

递归求出bx + ry = d 的一个解。

设求出x=x~0~,y=y~0~,考虑如何把它变形成 ax + by = d 的解。

将a=bq+r代入ax+by=d,化简得:
\[ b(xq+y)+rx=d \]
当xq+y=x~0~,x=y~0~,则上式成立


\[ x=y_0 \]

\[ y=x_0−y_0q \]

为 ax + by = d 的解

边界条件 b=0时,x=1,y=0

上一篇:C语言--编写程序,输入一个整数,判断它能否被3,5,7整除


下一篇:【C++】__gcd(x,y)函数