[exaqp]数论

未完工,最起码咕半年才能结束

目录

  1. 算术基本定理

    1. 整除

    2. 质数

    3. 质数,约数判断

    4. 算术基本定理

    5. 质因数分解

  2. 最大公约数

    1. 前置芝士

    2. 最大公约数

    3. 互质

    4. 辗转相除法(求最大公约数)

    5. 最小公倍数

一、算术基本定理

整除

对于整数 a , bb>0 ,则存在唯一的整数 q , r ,满足 a=bq+r ,其中 0r<b ,则整数除法记为

a÷b=qr

其中称 q 为商、r 为余数。

当余数 r=0 时 ,称 b 整除 a ,记做 ba,否则记作 ba

b 整除 a,称 ba 的约数(因数),ab 的倍数。

一个数总能被 1 和它本身整除。

质数

对于一个正整数 n,记函数 d(n)n 的约数个数。

例如 d(6)=4

d(n)=2,则称 n质数(也称素数);

d(n)>2,则称 n合数

d(1)=1,因此 1 既不是质数也不是合数;

大于 1正整数至少有两个约数(1 和本身),因此不是质数就是合数。

所有质数都是 0 的约数(所有数乘 0 都等于 0),但讨论时不考虑。

数论函数都是定义在正整数域上的,所以也不考虑负数。

质数,约数判断

2(n1) 的数除 n,如果某个数能整除 n,则 n 为合数;

反之如果都不能整除 n,则 n 为质数。

xn 的约数,则 nx 也是 n 的约数,且 xnx 之中必有一个 n

所以只需要枚举 1n 的所有数,判断是不是 n 的约数即可。

算数基本定理

唯一分解定理

任意大于 1 的正整数可以分解为若干质数的乘积,且该分解唯一。

n=p1c1p2c2pkak

其中 pi 均为质数,pi<pi+1ci>0

例如 36 可以唯一分解为 36=22×32

约数个数定理

d(n)=i(ci+1)

举例:

36=22×32

d(36)=(2+1)×(2+1)=9

质因数分解

求出正整数 n 的唯一分解的过程称为质因数分解。

当找到一个质因数 d 时,将 n 除以 d 继续进行质因数分解。

从小到大枚举 d,当 d>n 时,说明 n 为质数,不需要再进行枚举。

相关结论:n 的大于 n 的质因数最多只有一个。

二、最大公约数

前置芝士

约定一个正整数的表示方法:

n=c1,c2,c3, 表示 $ n = 2{c_1}35^{c_3}\cdots c_i = 0 $。

180=22×32×5=2,2,1

a=a1,a2,a3,

b=b1,b2,b3,

则有

ab=a1+b1,a2+b2,a3+b3,

如果对于所有 i 均满足 aibi,则有 ba,且

a÷b=a1b1,a2b2,a3b3,

最大公约数

c 同时是 ab 的约数,则称 cab 的公约数。

ab 的公约数中最大的一个称为最大公约数。

ab 的最大公约数记为 gcd(a,b) ,简记为 (a,b)

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

对于任意正整数 x

gcd(x,0)=x        0=x×0

gcd(x,1)=1

gcd(x,x)=x

设有正整数 $ a b $:

a=a1,a2,a3,

b=b1,b2,b3,

gcd(a,b)=min(a1,b1),min(a2,b2),min(a3,b3),

举例:

36=22×32=2,2

180=22×32×5=2,2,1

gcd(36,180)=min(2,2),min(2,2),min(1,0)=2,2,0=36

互质

(a,b)=1 (即 gcd(a,b)=1 ),称 ab 互质,记为 ab

分别对 ab 进行质因数分解,没有相同的质因数。所以 ab

p 为质数,则 p 和任意小于 p 的正整数均互质。

特殊:01 互质。

解释:因为 0 有无数个约数,而 1 的约数只有一个,就是它本身。0和1的公约数只有 1,所以 01

辗转相除法

dab 的公约数,则 adbd 均为整数。

假设 a>b,则有

a+b=ad×d+bd×d=(ad+bd)×d

ab=ad×dbd×d=(adbd)×d

ad+bdadbd 仍为整数,

(a+b)(ab) 也是 d 的倍数。

即两数相互加减,公因数不变。

举例:

a=18,b=12,d=6

18+12=186×6+126×6=(186+126)×6

1812=186×6126×6=(186126)×6

故有 gcd(a,b)=gcd(a±b,b)

更进一步可知 gcd(a,b)=gcd(a

又因为 a,故又可以重复上式中的过程,直到 b=0,则此时的 a 就是最大公约数。

复杂度 O(log(a+b))

最小公倍数

对于两个整数 $ a b c a b c a b $ 的公倍数。

ab 的公倍数中最小的一个称为最小公倍数。

一般记作 lcm(a,b),也可简记为 [a,b]

同余

若两数 a , b 除以 c 的余数相等,则称 a , bc 同余,记做 ab(mod c)

欧几里得算法

问题:给出 a , b ,快速求出 (a,b)

引理:若 a<b ,则 b

不断运用 (a,b)=(a,b ,直到某个数等于 0 。

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

欧拉函数

φ(n) 代表 1n 中与 n 互质的数的个数,称为欧拉函数。

例如 112 中,1 , 5 , 7 , 11 这 4 个数与 12 互质,所以 φ(12)=4

快速幂

每次询问给出 a , b , c ,快速求出 ab  ,不预处理,每次询问 O(log b)

ab={(ab/2)2b%2==0(ab/2)2×ab%2==1 ,只要知道 ab/2 ,就能快速求出 ab

注:   表示向下取整。

int p(int a,int b,int c)
{
	if(b==0) return 1;
	int ans=p(a,b/2,c);
	ans=ans*ans%c;
	if(b&1) ans=ans*a%c;
   //b&1就等于b%2==1
	return ans;
}
int p(int a,int b,int c)
{
	int ans=1;
	for(;b;b>>=1) //b>>=1等同于b/=2
	{
		if(b&1) ans=ans*a%c;
		a=a*a%c;
	}
	return ans;
}

其他

任意,对于所有元素。

存在,至少一个元素。

大佬写的数论

exgcd

posted @   exaqp  阅读(117)  评论(3编辑  收藏  举报
相关博文:
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效
点击右上角即可分享
微信分享提示