文章目录
设
a
,
b
∈
N
,
a
≠
0
a, b\in\mathbb{N},a\neq0
a,b∈N,a̸=0。
记
a
a
a除
b
b
b即
b
÷
a
b\div a
b÷a的余数为
b
 
m
o
d
 
a
b\bmod a
bmoda。
若存在
m
∈
Z
+
m\in\mathbb{Z}^+
m∈Z+,使得
a
 
m
o
d
 
m
=
b
 
m
o
d
 
m
a\bmod m\ =\ b\bmod m
amodm = bmodm,记作
a
≡
b
(
m
o
d
m
)
a\equiv b\pmod{m}
a≡b(modm)
1.整除
若存在整数 p ≠ 0 p\neq0 p̸=0使得 a q = b aq=b aq=b,那么称 a a a是 b b b的因数(约数), b b b是 a a a的倍数, a a a整除 b b b, b b b能被 a a a整除,记作 a ∣ b a\mid b a∣b,同时 b ≡ 0 ( m o d a ) b\equiv0\pmod{a} b≡0(moda)。
性质
a
∣
b
,
b
∣
c
⇒
a
∣
c
a\mid b,b\mid c\Rightarrow a\mid c
a∣b,b∣c⇒a∣c
a
∣
b
,
c
∣
d
⇒
a
c
∣
b
d
a\mid b,c\mid d\Rightarrow ac\mid bd
a∣b,c∣d⇒ac∣bd
a
∣
b
,
a
∣
c
⇒
a
∣
p
b
+
q
c
a\mid b,a\mid c\Rightarrow a\mid pb+qc
a∣b,a∣c⇒a∣pb+qc
整除也可以定义同余,即
a
≡
b
(
m
o
d
m
)
⇔
m
∣
(
a
−
b
)
a\equiv b\pmod{m}\Leftrightarrow m\mid (a-b)
a≡b(modm)⇔m∣(a−b)
所以,若
a
≡
b
(
m
o
d
m
)
,
n
∣
m
⇔
a
≡
b
(
m
o
d
n
)
\mathbf{a\equiv b\pmod{m},n\mid m\Leftrightarrow a\equiv b\pmod{n}}
a≡b(modm),n∣m⇔a≡b(modn)
2.性质
自反性:
a
≡
a
(
m
o
d
m
)
a\equiv a\pmod{m}
a≡a(modm)
对称性:
a
≡
b
(
 
m
o
d
 
m
)
⇒
b
≡
a
(
m
o
d
m
)
a\equiv b(\bmod m) \Rightarrow b\equiv a\pmod{m}
a≡b(modm)⇒b≡a(modm)
传递性:
a
≡
b
(
m
o
d
m
)
,
b
≡
c
(
m
o
d
m
)
⇒
a
≡
c
(
m
o
d
m
)
a\equiv b\pmod{m},b\equiv c\pmod{m}\Rightarrow a\equiv c\pmod{m}
a≡b(modm),b≡c(modm)⇒a≡c(modm)
a
≡
b
(
m
o
d
m
)
⇔
k
a
≡
k
b
(
m
o
d
k
m
)
\mathbf{a\equiv b\pmod{m}\Leftrightarrow ka\equiv kb\pmod{km}}
a≡b(modm)⇔ka≡kb(modkm)
证明:
m
∣
(
a
−
b
)
⇔
k
m
∣
k
(
a
−
b
)
⇔
k
m
∣
(
k
a
−
k
b
)
⇔
k
a
≡
k
b
(
m
o
d
k
m
)
m\mid (a-b)\Leftrightarrow km\mid k(a-b)\Leftrightarrow km\mid (ka-kb)\Leftrightarrow ka\equiv kb\pmod{km}
m∣(a−b)⇔km∣k(a−b)⇔km∣(ka−kb)⇔ka≡kb(modkm)
a
c
≡
b
c
(
m
o
d
m
)
⇔
a
≡
b
(
m
o
d
m
(
c
,
m
)
)
\mathbf{ac\equiv bc\pmod{m}\Leftrightarrow a\equiv b\pmod{\frac{m}{(c,m)}}}
ac≡bc(modm)⇔a≡b(mod(c,m)m)
证明:(充分性)有
m
∣
c
(
a
−
b
)
m\mid c(a-b)
m∣c(a−b)。
若
(
m
,
c
)
=
1
(m,c)=1
(m,c)=1,则
m
∣
(
a
−
b
)
m\mid (a-b)
m∣(a−b);
否则,有
m
(
c
,
m
)
∣
c
(
c
,
m
)
(
a
−
b
)
\frac{m}{(c,m)}\mid \frac{c}{(c,m)}(a-b)
(c,m)m∣(c,m)c(a−b),那么
m
(
c
,
m
)
∣
(
a
−
b
)
\frac{m}{(c,m)}\mid (a-b)
(c,m)m∣(a−b),因为
(
m
(
c
,
m
)
,
c
(
c
,
m
)
)
=
1
(\frac{m}{(c,m)},\frac{c}{(c,m)})=1
((c,m)m,(c,m)c)=1
3.辗转相除法
就是欧几里得算法,用于在 O ( log max ( a , b ) ) O(\log\max(a,b)) O(logmax(a,b))时间内求出 ( a , b ) (a,b) (a,b)。
这是基于一个定理的——
(
a
,
b
)
=
(
r
,
b
)
(a,b)=(r,b)
(a,b)=(r,b),其中
a
≡
r
(
m
o
d
b
)
a\equiv r\pmod{b}
a≡r(modb)
证明:
设
a
=
m
c
,
b
=
n
c
,
(
m
,
n
)
=
1
,
a
=
k
b
+
r
a=mc,b=nc,(m,n)=1,a=kb+r
a=mc,b=nc,(m,n)=1,a=kb+r,则
a
=
m
c
=
k
b
+
r
=
k
n
c
+
r
⇒
r
=
(
m
−
k
n
)
c
a=mc=kb+r=knc+r\Rightarrow r=(m-kn)c
a=mc=kb+r=knc+r⇒r=(m−kn)c
所以说现在需要证
(
(
m
−
k
n
)
c
,
n
)
=
1
((m-kn)c,n)=1
((m−kn)c,n)=1
使用反证法,设
m
−
k
n
=
x
d
,
n
=
y
d
,
d
>
1
m-kn=xd,n=yd,d>1
m−kn=xd,n=yd,d>1,则有
m
=
x
d
+
k
n
=
x
d
+
k
y
d
=
(
x
+
k
y
)
d
m=xd+kn=xd+kyd=(x+ky)d
m=xd+kn=xd+kyd=(x+ky)d,这样
d
∣
(
m
,
n
)
d\mid (m,n)
d∣(m,n),与
(
m
,
n
)
=
1
(m,n)=1
(m,n)=1矛盾,所以原命题成立。
模板代码:__gcd(a,b)
inline long long gcd(long long a, long long b) { return b ? gcd(b, a % b) : a; }
inline long long lcm(long long a, long long b) { return a / gcd(a,b) * b; }
由于 a   m o d   b < a 2 a\bmod b<\frac{a}{2} amodb<2a,每次递归后 a , b a,b a,b中间至少有一个数缩小一半,所以该算法求 g c d gcd gcd的时间复杂度为 O ( log max ( a , b ) ) O(\log\max(a,b)) O(logmax(a,b))
4.欧拉函数
4.1.完全剩余系
定义模m同余的所有整数构成一个剩余类。将整数划分为m个剩余类,同一个类中所有的数模m同余,来自不同剩余类的数模m不同余。
例如模3意义下可分为以下3个剩余类
{
…
,
−
3
,
0
,
3
,
6
,
…
}
,
{
…
,
−
2
,
1
,
4
,
7
,
…
}
,
{
…
,
−
1
,
2
,
5
,
8
,
…
}
\{…,-3,0,3,6,…\}, \{…,-2,1,4,7,…\}, \{…,-1,2,5,8,…\}
{…,−3,0,3,6,…},{…,−2,1,4,7,…},{…,−1,2,5,8,…}
记号[a]表示a所在的剩余类,例如
[
0
]
=
{
…
,
−
3
,
0
,
3
,
6
,
…
}
[0]= \{…,-3,0,3,6,…\}
[0]={…,−3,0,3,6,…},
对于集合S,S中所有数模m的余数构成的集合称为S在模m意义下的剩余系。如果S为全体整数,此剩余系称为完全剩余系。
一般地,模m意义下的完全剩余系为
{
0
,
1
,
2
,
…
,
m
−
1
}
\{0,1,2,…,m-1\}
{0,1,2,…,m−1}
剩余系中与m互质的数的集合称为简化剩余系,或缩系。
完全剩余系的性质:
- 对于 m m m个整数,其构成模 m m m的完系等价于其关于模 m m m两两不同余
- 若 a i ( 1 ≤ i ≤ m ) a_i(1\leq i\leq m) ai(1≤i≤m)构成模 m m m的完系 k , t ∈ Z , ( k , m ) = 1 k,t\in \mathbb{Z},(k,m)=1 k,t∈Z,(k,m)=1,则 k a i + t ka_i+t kai+t也构成模 m m m的完系。
4.2.简化剩余系
简化剩余系又称既约剩余系,缩系。
定义:剩余系中与m互质的数的集合称为简化剩余系。
性质:
- 设 m m m为自然数, k , t k,t k,t为任意整数, ( k , m ) = 1 (k,m)=1 (k,m)=1,则当x属于m的简化剩余系时, k x + t m kx+tm kx+tm亦属于模 m m m的简化剩余系。
- 设 m m m为自然数, k , t k,t k,t为任意整数, ( k , m ) = 1 (k,m)=1 (k,m)=1,若ai组成了模m的简化剩余系,那么 k a i + t m ka_i+tm kai+tm也组成模 m m m的简化剩余系。
4.3.正题
欧拉是一个大坏人……
一个数n的简化剩余系的大小记为
φ
(
n
)
\varphi(n)
φ(n),称为欧拉函数,一个等价的定义是
n
n
n以内和
n
n
n互质的数的个数。
有
a
>
1
a>1
a>1,则
a
=
p
1
w
1
∗
p
2
w
2
∗
p
3
w
3
∗
⋯
∗
p
m
w
m
a={p_1}^{w_{_1}}*{p_2}^{w_{_2}}*{p_3}^{w_{_3}}*\cdots*{p_m}^{w_{_m}}
a=p1w1∗p2w2∗p3w3∗⋯∗pmwm,则
φ
(
n
)
=
n
∏
i
=
1
m
(
1
−
p
i
)
=
∏
i
=
1
m
p
i
w
i
−
1
(
p
i
−
1
)
\varphi(n)=n\prod_{i=1}^{m}(1-p_i)=\prod_{i=1}^{m}{p_i}^{w_{_i}-1}(p_i-1)
φ(n)=ni=1∏m(1−pi)=i=1∏mpiwi−1(pi−1)
(老师说:)从表达式看出,欧拉函数是积性函数。
性质(鬼火冒):
- 对于质数 p p p, φ ( p ) = p − 1 \varphi(p)=p−1 φ(p)=p−1
- 当 n > 2 n>2 n>2时, φ ( n ) \varphi(n) φ(n)是偶数
- 小于 n n n且与 n n n互质的数的总和为 φ ( n ) ∗ n 2 \varphi(n)*\frac{n}{2} φ(n)∗2n
- n = ∑ d ∣ n φ ( n ) n=\sum_{d\mid n}\varphi(n) n=d∣n∑φ(n)
4.4.计算
一般来说,我们可以根据上面的两个公式求出
φ
(
n
)
\varphi(n)
φ(n)。
公式一计算(
O
(
n
)
O(\sqrt n)
O(n)):
φ
(
n
)
=
n
∏
i
=
1
m
(
1
−
p
i
)
\varphi(n)=n\prod_{i=1}^{m}(1-p_i)
φ(n)=ni=1∏m(1−pi)
inline int phi(int n) {
int res = n;
for(register int i = 2; i <= sqrt(n); i++) {
if(n % i == 0) {
res = res / i * (i - 1);
while(n % i == 0) n /= i;
}
}
if(n > 1) res = res / n * (n - 1);
return res;
}
该方法适合于单个计算的情况。
公式二计算:(
O
(
n
)
O(n)
O(n))
注:此方法是基于欧拉筛的,得到
φ
(
1
)
−
φ
(
n
)
\varphi(1)-\varphi(n)
φ(1)−φ(n)
const int MAXN = 100001;
bool vis[MAXN];
int phi[MAXN], pr[MAXN], tot;
inline void Euler(int n) {
phi[1] = 1;
for(register int i = 2; i <= n; i++) {
if(!vis[i]) {
pr[++tot] = i;
phi[i] = i - 1;
}
for(register int j = 1; j <= tot && i * pr[j] <= n; j++) {
vis[i * pr[j]] = 1;
if(i % pr[j]) phi[i * pr[j]] = phi[i] * (pr[j] - 1);
else {
phi[i * pr[j]] = phi[i] * pr[j];
break;
}
}
}
}
5.一些定理
5.1.欧拉定理
若 ( a , n ) = 1 , a , n ∈ Z + \mathbf{(a,n)=1,a,n\in\mathbb{Z^+}} (a,n)=1,a,n∈Z+,则 a φ ( n ) ≡ 1 ( m o d n ) \mathbf{a^{\varphi(n)}\equiv1\pmod{n}} aφ(n)≡1(modn)
证明:设
n
n
n的缩系为
b
1
,
b
2
,
⋯
 
,
b
φ
(
n
)
b_1,b_2,\cdots,b_{\varphi(n)}
b1,b2,⋯,bφ(n)
都乘以
a
a
a,那么
a
b
1
,
a
b
2
,
⋯
 
,
a
b
φ
(
n
)
ab_1,ab_2,\cdots,ab_{\varphi(n)}
ab1,ab2,⋯,abφ(n)亦构成n的缩系(缩系性质二)
b
1
b
2
⋯
b
φ
(
n
)
≡
a
b
1
a
b
2
⋯
a
b
φ
(
n
)
≡
a
φ
(
n
)
b
1
b
2
⋯
b
φ
(
n
)
(
m
o
d
n
)
b_1b_2\cdots b_{\varphi(n)}\equiv ab_1ab_2\cdots ab_{\varphi(n)}\equiv a^{\varphi(n)} b_1b_2\cdots b_{\varphi(n)}\pmod{n}
b1b2⋯bφ(n)≡ab1ab2⋯abφ(n)≡aφ(n)b1b2⋯bφ(n)(modn)
由于
n
n
n的缩系内所有数之积与
n
n
n是互质的,故约去
b
1
b
2
⋯
b
φ
(
n
)
b_1b_2\cdots b_{\varphi(n)}
b1b2⋯bφ(n)
得
a
φ
(
n
)
≡
1
(
m
o
d
n
)
a^{\varphi(n)} ≡1\pmod{n}
aφ(n)≡1(modn)
欧拉定理也有特殊情况——那就是费马小定理。
有
p
∈
P
,
p
∤
a
p\in\mathbb{P},p\nmid a
p∈P,p∤a,则
a
p
−
1
≡
1
(
m
o
d
p
)
\mathbf{a^{p-1}\equiv1\pmod{p}}
ap−1≡1(modp)
欧拉定理也可以用于降幂,可以得到 a b ≡ a b % φ ( m ) + φ ( m ) ( m o d m ) , b ≥ φ ( m ) \mathbf{a^b\equiv a^{b\%\varphi(m)+\varphi(m)}\pmod m,b\geq\varphi(m)} ab≡ab%φ(m)+φ(m)(modm),b≥φ(m)
5.2.二次探测定理
p
p
p是奇素数,在
p
p
p的缩系内解方程
x
2
≡
1
(
m
o
d
p
)
x^2\equiv1\pmod{p}
x2≡1(modp)
x
2
−
1
≡
(
x
+
1
)
(
x
−
1
)
≡
0
(
m
o
d
p
)
x^2−1\equiv(x+1)(x−1)\equiv0\pmod{p}
x2−1≡(x+1)(x−1)≡0(modp)
显然有
1
1
1和
p
−
1
p−1
p−1两个解,这两个解是唯二解。
5.3.威尔逊定理
p
∈
P
⇔
(
p
−
1
)
!
≡
−
1
(
m
o
d
p
)
p\in\mathbb{P}\Leftrightarrow(p-1)!\equiv-1\pmod{p}
p∈P⇔(p−1)!≡−1(modp)
证明:证明
5.4.Miller-Rabin
实在写不下去了 给链接
和代码
typedef long long ll;
inline ll mul(ll a, ll b, ll mod) {
ll res = 0;
for (; b ; a = (a + a) % mod, b >>= 1)
if (b & 1)
res = (res + a) % mod;
return res;
}
inline ll ksm(ll a, ll n, ll mod) {
ll res = 1;
for (; n ; a = mul(a, a, mod), n >>= 1)
if (n & 1)
res = mul(res, a, mod);
return res;
}
inline bool Miller_Rabin(ll n) {
if(n == 2 || n == 3 || n == 5 || n == 7) return 1;
if(n % 2 == 0|| n % 3 == 0 || n % 5 == 0 || n % 7 == 0) return 0;
ll m = n - 1, k = 0;
while(!(m & 1)) {
k++; m >>= 1;
for(register int i = 1; i <= 10; i++) {
ll a = rand() % (n - 1) + 1;
ll x = ksm(a, m, n); ll y;
for(register int j = 1; j <= k; j++) {
y = mul(x, x, n);
if (y == 1 && x != 1 && x != n - 1)
return 0;
x = y;
}
if(y != 1) return 0;
}
}
return 1;
}
另外,进行多轮素性测试,误判率将指数级收敛。