数论基础
质数
质数这东西让我联想到了原子,一样不可拆分,所以我们说质数具有原子性。
我们设
π
(
x
)
\pi(x)
π(x)为不大于x的质数个数,可得
π
(
x
)
=
O
(
x
ln
(
x
)
)
\pi(x)=O(\frac x{\ln(x)})
π(x)=O(ln(x)x)。
唯一分解定理
任何一个
N
(
N
>
1
)
N(N>1)
N(N>1)能被质数分解,且只有一种分解方式,即
N
=
p
1
c
1
×
p
2
c
2
×
…
…
×
p
m
c
m
(
N
>
1
)
N=p_1^{c_1}\times p_2^{c_2}\times……\times p_m^{c_m}(N>1)
N=p1c1×p2c2×……×pmcm(N>1)
其中
p
i
p_i
pi为素数,
c
i
c_i
ci为正整数,满足
p
1
<
p
2
<
…
…
<
p
m
p_1<p_2<……<p_m
p1<p2<……<pm。
筛质数
可得:对于n,最多只有一个质因子大于
n
\sqrt n
n。
证明:若两个质因子
a
>
n
,
b
>
n
a>\sqrt n,b>\sqrt n
a>n,b>n。
~~~~~~~~~~
则
a
×
b
>
n
a\times b>n
a×b>n(不成立),即原命题正确。
暴力试除法
根据上述结论我们对于一个数,只需要枚举 1 1 1~ n \sqrt n n即可,这里就不给代码了,时间复杂度 O ( n n ) O(n\sqrt n) O(nn)。
埃式筛法
枚举到一个质数,我们只需要将它的倍数全部标记即可,没被标记的就是质数,这里给出核心代码。
int prime[100005],flag[100005],tot;
void find(int n)
{
for(int i=2;i<=n;i++)
if(!flag[i])
{
flag[i]=1;
prime[++tot]=i;
for(int j=2;j<=n/i;j++)
flag[i*j]=1;
}
for(int i=1;i<=tot;i++)
printf("%d ",prime[i]);
}
欧拉筛法(线性筛法)
埃式筛法已经接近
O
(
n
)
O(n)
O(n)的复杂度了,但是优化的余地。
对于一个数,可能被多次标记,我们可以减少它们的次数,来达到优化的目的。
例如:30,它可以被分解成:
30
=
2
×
15
=
3
×
10
=
5
×
6
30=2\times15=3\times10=5\times6
30=2×15=3×10=5×6。
根据上述的唯一分解定理,我们只需要用最小的质因子来分解。
例如:
30
30
30分解成
30
=
2
×
15
30=2\times15
30=2×15。
int prime[100005],flag[100005],tot;
void find(int n)
{
for(int i=2;i<=n;i++)
{
if(!flag[i]) prime[++tot]=i;
for(int j=1;j<=tot&&prime[j]*i<=n;j++)
{
flag[i*prime[j]]=1;
if(i%prime[j]==0) break;
}
}
for(int i=1;i<=tot;i++)
printf("%d ",prime[i]);
}
整除
令 a ∣ b a|b a∣b表示a整除b,其中b是a的倍数,a是b的约数。
一些性质
1、若
d
∣
a
d|a
d∣a,有
d
∣
k
a
d|ka
d∣ka。
2、对称性:若
a
∣
b
,
b
∣
a
a|b,b|a
a∣b,b∣a,有
a
=
b
a=b
a=b。
3、传递性:若
c
∣
b
,
b
∣
a
c|b,b|a
c∣b,b∣a,则
c
∣
a
c|a
c∣a。
4、若
c
∣
a
,
d
∣
b
c|a,d|b
c∣a,d∣b,则
c
d
∣
a
b
cd|ab
cd∣ab。
5、若
c
∣
a
,
c
∣
b
c|a,c|b
c∣a,c∣b,则
c
∣
(
m
a
+
n
b
)
。
c|(ma+nb)。
c∣(ma+nb)。
约数
若
N
=
p
1
c
1
×
p
2
c
2
×
…
…
×
p
m
c
m
(
N
>
1
)
N=p_1^{c_1}\times p_2^{c_2}\times……\times p_m^{c_m}(N>1)
N=p1c1×p2c2×……×pmcm(N>1)
其中
p
i
p_i
pi为素数,
c
i
c_i
ci为正整数,满足
p
1
<
p
2
<
…
…
<
p
m
p_1<p_2<……<p_m
p1<p2<……<pm,
则
N
N
N的正约数集合
{
p
1
b
1
,
p
2
b
2
,
…
…
,
p
m
b
m
}
\{p_1^{b_1},p_2^{b_2},……,p_m^{b_m}\}
{p1b1,p2b2,……,pmbm},其中
0
≤
b
i
≤
c
i
0\le b_i\le c_i
0≤bi≤ci
由此可推出如下两条公式:
1、
N
N
N的约数个数:
∏
i
=
1
m
c
i
+
1
\prod^m_{i=1}c_i+1
∏i=1mci+1。
2、
N
N
N的约数的和:
∏
i
=
1
m
(
∑
j
=
0
c
j
(
p
i
)
j
)
\prod_{i=1}^m(\sum^{c_j}_{j=0}(p_i)^j)
∏i=1m(∑j=0cj(pi)j)。
最大公约数和最小公倍数
我们设
g
c
d
(
a
,
b
)
gcd(a,b)
gcd(a,b)为
a
、
b
a、b
a、b的最大公约数。
l
c
m
(
a
,
b
)
~~~~~~~~~~lcm(a,b)
lcm(a,b)为
a
、
b
a、b
a、b的最下公倍数。
一些性质
1、若
a
∣
m
,
b
∣
m
a|m,b|m
a∣m,b∣m,则
l
c
m
(
a
,
b
)
∣
m
lcm(a,b)|m
lcm(a,b)∣m。
2、若
d
∣
a
,
d
∣
b
d|a,d|b
d∣a,d∣b,则
d
∣
g
c
d
(
a
,
b
)
d|gcd(a,b)
d∣gcd(a,b)。
3、正整数m,a,b,有
l
c
m
(
m
a
,
m
b
)
=
m
×
l
c
m
(
a
,
b
)
lcm(ma,mb)=m\times lcm(a,b)
lcm(ma,mb)=m×lcm(a,b)
4、
a
×
b
=
g
c
d
(
a
,
b
)
×
l
c
m
(
a
,
b
)
a\times b=gcd(a,b)\times lcm(a,b)
a×b=gcd(a,b)×lcm(a,b)。
求 l c m ( a , b ) lcm(a,b) lcm(a,b)和 g c d ( a , b ) gcd(a,b) gcd(a,b)
interesting的方法
将a,b分解质因数,得:
a
=
p
1
a
1
×
p
2
a
2
×
…
…
×
p
m
a
m
a=p_1^{a_1}\times p_2^{a_2}\times……\times p_m^{a_m}
a=p1a1×p2a2×……×pmam
b
=
p
1
b
1
×
p
2
b
2
×
…
…
×
p
m
b
m
b=p_1^{b_1}\times p_2^{b_2}\times……\times p_m^{b_m}
b=p1b1×p2b2×……×pmbm
那么
g
c
d
(
a
,
b
)
=
p
1
m
i
n
(
a
1
,
b
1
)
×
p
2
m
i
n
(
a
2
,
b
2
)
×
…
…
×
p
m
m
i
n
(
a
m
,
b
m
)
gcd(a,b)=p_1^{min(a_1,b_1)}\times p_2^{min(a_2,b_2)}\times……\times p_m^{min(a_m,b_m)}
gcd(a,b)=p1min(a1,b1)×p2min(a2,b2)×……×pmmin(am,bm)
l
c
m
(
a
,
b
)
=
p
1
m
a
x
(
a
1
,
b
1
)
×
p
2
m
a
x
(
a
2
,
b
2
)
×
…
…
×
p
m
m
a
x
(
a
m
,
b
m
)
~~~~~lcm(a,b)=p_1^{max(a_1,b_1)}\times p_2^{max(a_2,b_2)}\times……\times p_m^{max(a_m,b_m)}
lcm(a,b)=p1max(a1,b1)×p2max(a2,b2)×……×pmmax(am,bm)
欧几里得算法
g
c
d
(
a
,
b
)
=
g
c
d
(
b
,
a
m
o
d
b
)
gcd(a,b)=gcd(b,a\bmod b)
gcd(a,b)=gcd(b,amodb)。
我们可以根据这个求出
g
c
d
(
a
,
b
)
gcd(a,b)
gcd(a,b)。
更相减损法
g
c
d
(
a
,
b
)
=
g
c
d
(
b
,
a
−
b
)
=
g
c
d
(
a
,
a
−
b
)
gcd(a,b)=gcd(b,a-b)=gcd(a,a-b)
gcd(a,b)=gcd(b,a−b)=gcd(a,a−b)。
g
c
d
(
2
a
,
2
b
)
=
2
g
c
d
(
a
,
b
)
gcd(2a,2b)=2gcd(a,b)
gcd(2a,2b)=2gcd(a,b)。
根据上述可得
g
c
d
(
a
,
b
)
gcd(a,b)
gcd(a,b)。
互质
g
c
d
(
a
,
b
)
=
1
gcd(a,b)=1
gcd(a,b)=1:a,b互质。
g
c
d
(
a
,
b
,
c
)
=
1
gcd(a,b,c)=1
gcd(a,b,c)=1:a,b,c互质。
g
c
d
(
a
,
b
)
=
g
c
d
(
b
,
c
)
=
g
c
d
(
a
,
c
)
=
1
gcd(a,b)=gcd(b,c)=gcd(a,c)=1
gcd(a,b)=gcd(b,c)=gcd(a,c)=1:三者两两互质。
欧拉函数
欧拉函数
φ
(
n
)
\varphi(n)
φ(n),表示
1
1
1~
n
n
n中与n互质的个数。
若
N
=
p
1
c
1
×
p
2
c
2
×
…
…
×
p
m
c
m
N=p_1^{c_1}\times p_2^{c_2}\times……\times p_m^{c_m}
N=p1c1×p2c2×……×pmcm,
其中
p
i
p_i
pi为素数,
c
i
c_i
ci为正整数,满足
p
1
<
p
2
<
…
…
<
p
m
p_1<p_2<……<p_m
p1<p2<……<pm,
φ
(
n
)
=
N
×
p
1
−
1
p
1
×
p
2
−
1
p
2
×
…
…
×
p
m
−
1
p
m
=
N
×
∏
(
1
−
1
p
)
\varphi(n)=N\times \frac{p_1-1}{p_1} \times \frac{p_2-1}{p_2}\times……\times\frac{p_m-1}{p_m}=N\times \prod(1-\frac1p)
φ(n)=N×p1p1−1×p2p2−1×……×pmpm−1=N×∏(1−p1)
一些性质
1、
φ
(
1
)
=
1
\varphi(1)=1
φ(1)=1。
2、p是质数,
φ
(
p
)
=
p
−
1
\varphi(p)=p-1
φ(p)=p−1。
3、p是质数,
n
=
p
k
,
φ
(
n
)
=
p
k
−
p
k
−
1
=
(
p
−
1
)
p
k
−
1
n=p^k,\varphi(n)=p^k-p^{k-1}=(p-1)p^{k-1}
n=pk,φ(n)=pk−pk−1=(p−1)pk−1。
4、
g
c
d
(
a
,
b
)
=
1
,
φ
(
a
b
)
=
φ
(
a
)
×
φ
(
b
)
gcd(a,b)=1,\varphi(ab)=\varphi(a)\times\varphi(b)
gcd(a,b)=1,φ(ab)=φ(a)×φ(b)(积性函数)。
5、对于质数p,有
n
%
p
=
0
,
φ
(
n
p
)
=
φ
(
n
)
×
p
~~~~~n\%p=0,\varphi(np)=\varphi(n)\times p
n%p=0,φ(np)=φ(n)×p。
n
%
p
≠
0
,
φ
(
n
p
)
=
φ
(
n
)
×
(
p
−
1
)
=
φ
(
n
)
×
φ
(
p
)
~~~~~n\%p\neq0,\varphi(np)=\varphi(n)\times(p-1)=\varphi(n)\times\varphi(p)
n%p=0,φ(np)=φ(n)×(p−1)=φ(n)×φ(p)。
6、对于
n
>
1
n>1
n>1,
1
−
n
1-n
1−n中与n互质的数的和为
n
×
φ
(
n
)
2
n\times\frac{\varphi(n)}2
n×2φ(n)。
7、
∑
d
∣
n
φ
(
d
)
=
n
\sum_{d|n}\varphi(d)=n
∑d∣nφ(d)=n。
欧拉筛求欧拉函数
根据上述性质:
每次枚举出一个质数
i
i
i,
p
h
i
i
=
i
−
1
phi_i=i-1
phii=i−1。根据第5个性质,即可推出。
int prime[100005],flag[100005],phi[100005],tot;
void find(int n)
{
phi[1]=1;
for(int i=2;i<=n;i++)
{
if(!flag[i]) prime[++tot]=i,phi[i]=i-1;
for(int j=1;j<=tot&&prime[j]*i<=n;j++)
{
flag[i*prime[j]]=1;
if(i%prime[j]==0)
{
phi[i*prime[j]]=phi[i]*prime[j];
break;
}
else phi[i*prime[j]]=phi[i]*phi[prime[j]];
}
}
for(int i=1;i<=n;i++)
printf("%d ",phi[i]);
}
同余
用m除整数a,b余数相同,称a和b对模m同余,记作
a
≡
b
(
m
o
d
m
)
a\equiv b\pmod m
a≡b(modm)
两个概念:
1、标准剩余系,每个同余系的任意两个整数模m同余。
2、既约剩余系,每个同余系的任意整数与m互质。
一些性质1
1、
a
≡
b
(
m
o
d
m
)
a\equiv b\pmod m
a≡b(modm),当且仅当
m
∣
(
a
−
b
)
m|(a-b)
m∣(a−b)。
2、
a
≡
b
(
m
o
d
m
)
a\equiv b\pmod m
a≡b(modm),当且仅当最在整数k,使得
a
=
b
+
k
m
a=b+km
a=b+km
一些性质2
有整数a,b,c,自然数m,n
1、自反性:
a
≡
a
(
m
o
d
m
)
a\equiv a\pmod m
a≡a(modm)。
2、对称性:若
a
≡
b
(
m
o
d
m
)
a\equiv b\pmod m
a≡b(modm),则
b
≡
a
(
m
o
d
m
)
b\equiv a\pmod m
b≡a(modm)。
3、传递性:
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,a\equiv c\pmod m
a≡b(modm),b≡c(modm),a≡c(modm)
4、同加性:
a
≡
b
(
m
o
d
m
)
,
a
+
c
≡
b
+
c
(
m
o
d
m
)
a\equiv b\pmod m,a+c\equiv b+c\pmod m
a≡b(modm),a+c≡b+c(modm)
5、同乘性:
a
≡
b
(
m
o
d
m
)
,
a
c
≡
b
c
(
m
o
d
m
)
a\equiv b\pmod m,ac\equiv bc\pmod m
a≡b(modm),ac≡bc(modm)
6、同幂性:
a
≡
b
(
m
o
d
m
)
,
a
n
≡
b
n
(
m
o
d
m
)
a\equiv b\pmod m,a^n\equiv b^n\pmod m
a≡b(modm),an≡bn(modm)
7、若
a
m
o
d
p
=
x
,
a
m
o
d
q
=
x
,
a
m
o
d
(
p
q
)
=
x
a \bmod p=x,a\bmod q=x,a\bmod (pq)=x
amodp=x,amodq=x,amod(pq)=x。p,q互质。
欧拉定理
若
g
c
d
(
a
,
n
)
=
1
gcd(a,n)=1
gcd(a,n)=1,则
a
φ
(
n
)
≡
1
(
m
o
d
n
)
a^{\varphi(n)}\equiv1\pmod n
aφ(n)≡1(modn)。
证明:设
S
1
=
{
r
1
,
r
2
,
…
…
,
r
φ
(
n
)
}
S_1=\{r_1,r_2,……,r_{\varphi(n)}\}
S1={r1,r2,……,rφ(n)}为
m
o
d
n
\bmod n
modn的既约剩余系,
S
2
=
{
a
r
1
,
a
r
2
,
…
…
,
a
r
φ
(
n
)
}
~~~~~~~~~~~~S_2=\{ar_1,ar_2,……,ar_{\varphi(n)}\}
S2={ar1,ar2,……,arφ(n)}为
m
o
d
n
\bmod n
modn的既约剩余系。
∏
i
=
1
φ
(
n
)
a
r
i
≡
∏
i
=
1
φ
(
n
)
r
i
(
m
o
d
n
)
~~~~~~~~~\prod_{i=1}^{\varphi(n)}ar_i\equiv\prod_{i=1}^{\varphi(n)}r_i\pmod n
∏i=1φ(n)ari≡∏i=1φ(n)ri(modn)
a
φ
(
n
)
∏
i
=
1
φ
(
n
)
r
i
≡
∏
i
=
1
φ
(
n
)
r
i
(
m
o
d
n
)
~~~~~~~~~a^{\varphi(n)}\prod_{i=1}^{\varphi(n)}r_i\equiv\prod_{i=1}^{\varphi(n)}r_i\pmod n
aφ(n)∏i=1φ(n)ri≡∏i=1φ(n)ri(modn)
n
∣
(
a
φ
(
n
)
∏
i
=
1
φ
(
n
)
r
i
−
∏
i
=
1
φ
(
n
)
r
i
)
~~~~~~~~~n|(a^{\varphi(n)}\prod^{\varphi(n)}_{i=1}r_i-\prod^{\varphi(n)}_{i=1}r_i)
n∣(aφ(n)∏i=1φ(n)ri−∏i=1φ(n)ri)
→
n
∣
(
a
φ
(
n
)
−
1
)
×
∏
i
=
1
φ
(
n
)
r
i
~~~~~\to n|(a^{\varphi(n)}-1)\times \prod^{\varphi(n)}_{i=1}r_i
→n∣(aφ(n)−1)×∏i=1φ(n)ri &
g
c
d
(
n
,
∏
i
=
1
φ
(
n
)
r
i
)
=
1
gcd(n,\prod^{\varphi(n)}_{i=1}r_i)=1
gcd(n,∏i=1φ(n)ri)=1
→
n
∣
(
a
φ
(
n
)
−
1
)
~~~~~\to n|(a^{\varphi(n)}-1)
→n∣(aφ(n)−1)
→
a
φ
(
n
)
≡
1
(
m
o
d
n
)
~~~~~\to a^{\varphi(n)}\equiv1\pmod n
→aφ(n)≡1(modn)。
费马小定理
若p为质数,a为整数,有
a
p
≡
a
(
m
o
d
p
)
a^p\equiv a\pmod p
ap≡a(modp)
证明:
1、
g
c
d
(
a
,
p
)
=
1
→
a
φ
(
p
)
≡
1
(
m
o
d
p
)
gcd(a,p)=1\to a^{\varphi(p)}\equiv1\pmod p
gcd(a,p)=1→aφ(p)≡1(modp)
~~~~
得
a
p
−
1
≡
1
(
m
o
d
p
)
→
a
p
≡
a
(
m
o
d
p
)
a^{p-1}\equiv1\pmod p\to a^p\equiv a\pmod p
ap−1≡1(modp)→ap≡a(modp)。
2、
g
c
d
(
a
,
p
)
≠
1
gcd(a,p)\neq1
gcd(a,p)=1,即a是p的倍数。
a
p
%
p
=
0
,
a
%
p
=
0
,
a^p\%p=0,a\%p=0,
ap%p=0,a%p=0,即
a
p
≡
a
(
m
o
d
p
)
a^p\equiv a\pmod p
ap≡a(modp)。
裴蜀定理(贝祖定理)
对于任意整数
a
,
b
a,b
a,b,存在一组整数
x
,
y
x,y
x,y,满足
a
x
+
b
y
=
g
c
d
(
a
,
b
)
ax+by=gcd(a,b)
ax+by=gcd(a,b)
证明:设
d
=
g
c
d
(
a
,
b
)
d=gcd(a,b)
d=gcd(a,b),则
a
=
d
a
′
,
b
=
d
b
′
a=da^{'},b=db^{'}
a=da′,b=db′
得
a
x
+
b
y
=
d
a
′
x
+
d
b
′
y
=
d
(
a
′
x
+
b
′
y
)
=
d
ax+by=da^{'}x+db^{'}y=d(a^{'}x+b^{'}y)=d
ax+by=da′x+db′y=d(a′x+b′y)=d,因为
a
′
,
b
′
,
x
,
y
a^{'},b^{'},x,y
a′,b′,x,y都是整数,所以只有
a
x
+
b
y
=
g
c
d
(
a
,
b
)
ax+by=gcd(a,b)
ax+by=gcd(a,b)或是
g
c
d
(
a
,
b
)
gcd(a,b)
gcd(a,b)得倍数时有解。
解法:当
b
=
0
b=0
b=0,有一组整数解
x
=
1
,
y
=
0
x=1,y=0
x=1,y=0,使得
a
×
1
+
0
×
0
=
g
c
d
(
a
,
0
)
a\times1+0\times0=gcd(a,0)
a×1+0×0=gcd(a,0)。
~~~~~~~~~~
当
b
>
0
b>0
b>0,
g
c
d
(
a
,
b
)
=
g
c
d
(
b
,
a
m
o
d
b
)
gcd(a,b)=gcd(b,a\bmod b)
gcd(a,b)=gcd(b,amodb),即
a
x
+
b
y
=
b
x
′
+
(
a
m
o
d
b
)
y
′
ax+by=bx^{'}+(a\bmod b)y^{'}
ax+by=bx′+(amodb)y′,化简得
a
x
+
b
y
=
b
x
′
+
(
a
−
b
×
⌊
a
b
⌋
)
y
′
ax+by=bx^{'}+(a-b\times\lfloor\frac ab\rfloor)y^{'}
ax+by=bx′+(a−b×⌊ba⌋)y′
=
a
y
′
+
b
(
x
′
−
a
b
y
′
)
=ay^{'}+b(x^{'}-\frac aby^{'})
=ay′+b(x′−bay′),另
x
=
y
′
,
y
=
x
′
−
a
b
y
′
x=y^{'},y=x^{'}-\frac aby^{'}
x=y′,y=x′−bay′。
扩展欧几里得的通解
对于
a
x
+
b
y
=
g
c
d
(
a
,
b
)
ax+by=gcd(a,b)
ax+by=gcd(a,b),通过扩欧得出一组通解
x
0
,
y
0
x_0,y_0
x0,y0。
得通解:
x
=
x
0
+
b
÷
g
c
d
(
a
,
b
)
×
t
x=x_0+b÷gcd(a,b)\times t
x=x0+b÷gcd(a,b)×t
y
=
y
0
−
a
÷
g
c
d
(
a
,
b
)
×
t
~~~~~~~~~~~~~y=y_0-a÷gcd(a,b)\times t
y=y0−a÷gcd(a,b)×t
最后祝大家GDKOI玩的开心!!!