符号定义
在数论中,有许许多多的符号需要我们知道,比如这些:
ϕ
(
p
)
\phi(p)
ϕ(p),它表示,在比p小且与p互质的个数
(a,b),表示a和b的最大公因数
[a,b],表示a和b的最小公倍数
n!,表示1~n这n个数相乘
鉴于无法使用向下取整,
目前,我们只需要用到这些符号
欧拉定理
定理
a ϕ ( p ) ≡ 1 ( m o d p ) a^{\phi(p)}\equiv 1\qquad(mod~p) aϕ(p)≡1(mod p)
证明过程
我们设n=
ϕ
(
p
)
{\phi(p)}
ϕ(p),{b|0<b<p且(b,p)=1}
我们容易知道,任意bi不等于bj(i,j<=n),所以
a
×
b
i
不
等
于
a
×
b
j
a\times bi 不等于a\times bj
a×bi不等于a×bj,且(a*bj,p)=1
这时,我们又要引入一个定理
若
(
a
,
p
)
=
1
,
则
(
a
m
o
d
p
,
p
)
=
1
若(a,p)=1,则(a\ mod~p,p)=1
若(a,p)=1,则(a mod p,p)=1
这个就留给读者自己证明了
所以我们再创造一个数组c吧,{c|
a
×
b
i
(
m
o
d
p
)
a\times bi(mod~p)
a×bi(mod p),1<=i<=n}
我们就可以知道c数组和b数组错位相等
为什么呢?因为c数组中每个数必定与p互质,而b数组中包含了每个小于p且与p互质的数,所以两个集合必定相等
所以c数组每个数相乘和b数组每个数相乘模p的值应该相等,即:
a
ϕ
(
p
)
×
b
1
×
b
2
×
…
…
×
b
n
≡
b
1
×
b
2
×
…
…
×
b
n
(
m
o
d
p
)
a^{\phi(p)}\times \\b1\times\\b2\times\\……\times\\bn\equiv b1\times\\b2\times\\……\times\\bn(mod~p)
aϕ(p)×b1×b2×……×bn≡b1×b2×……×bn(mod p)
所以
a
ϕ
(
p
)
≡
1
(
m
o
d
p
)
a^{\phi(p)}\equiv 1\qquad(mod~p)
aϕ(p)≡1(mod p)
证毕
完全分解定理
完全分解定理十分简单,就是说一个数可以分解为如下形式,即:
a
=
w
1
a
1
×
w
2
a
2
×
…
…
×
w
p
a
p
a=w_1^{a_1}\times\\w_2^{a_2}\times\\……\times\\w_p^{a_p}
a=w1a1×w2a2×……×wpap
其中,每个w数组中的值都为质数
这个东西显然成立,我就不多说了
组合数学
组合数学,是属于高中数学范围内的知识,他一般的形式就是从n个树中选出m个,问有多少种选法
我们定义两个数学符号,A,C
A表示从n个数中选m个,选出来要排序,问有多少种方法,C表示从n个数中选m个,选出来不排序,问有多少种做法
这个有计算公式,
A
(
n
,
m
)
=
n
!
(
n
−
m
)
!
A(n,m)=\frac{n!}{(n-m)!}
A(n,m)=(n−m)!n!,
C
(
n
,
m
)
=
n
!
m
!
×
(
n
−
m
)
!
C(n,m)=\frac{n!}{m!\times\\(n-m)!}
C(n,m)=m!×(n−m)!n!
我们以A(n,m)为例,选第一个可以有n个选择,选择第二个可以有(n-1)个选择,如此下去到第m个就有(n-m+1)个选择,把所有可能相乘,即为最终结果,就是:
n
×
(
n
−
1
)
×
(
n
−
1
)
×
…
…
×
(
n
−
m
+
1
)
n\times\\(n-1)\times\\(n-1)\times\\……\times\\(n-m+1)
n×(n−1)×(n−1)×……×(n−m+1)
即:
n
!
(
n
−
m
)
!
\frac{n!}{(n-m)!}
(n−m)!n!
那C(n,m)就只需要把A(n,m)再除以m!,因为选出来要全排,就有m!种情况,所以再一除,就是C(n,m)
至于组合数学的16种经典题以后再说吧。
卢卡斯定理
定理
C ( n , m ) ≡ C ( [ n p ] , [ m p ] ) × C ( n m o d p , m m o d p ) p 为 质 数 C(n,m)\equiv C([\frac{n}{p}],[\frac{m}{p}])\times\\C(n\qquad mod\qquad p,m\qquad mod\qquad p) \qquad p为质数 C(n,m)≡C([pn],[pm])×C(nmodp,mmodp)p为质数
证明过程
设
m
=
a
×
p
+
b
m=a\times\\p+b
m=a×p+b,
n
=
c
×
p
+
d
n=c\times\\p+d
n=c×p+d
即证,
C
(
n
,
m
)
≡
C
(
c
,
a
)
×
C
(
d
,
b
)
C(n,m)\equiv C(c,a)\times\\C(d,b)
C(n,m)≡C(c,a)×C(d,b)
即证,
n
!
m
!
(
n
−
m
)
!
≡
c
!
×
d
!
a
!
×
b
!
×
(
c
−
a
)
!
×
(
d
−
b
)
!
(
m
o
d
p
)
\frac{n!}{m!(n-m)!}\equiv\frac{c!\times\\d!}{a!\times\\b!\times\\(c-a)!\times\\(d-b)!}(mod~p)
m!(n−m)!n!≡a!×b!×(c−a)!×(d−b)!c!×d!(mod p)
即证,
m
!
×
(
n
−
m
)
!
×
c
!
×
d
!
m!\times\\(n-m)!\times\\c!\times\\d!
m!×(n−m)!×c!×d!
≡
\equiv
≡
n
!
×
a
!
×
b
!
×
(
c
−
a
)
!
×
(
d
−
b
)
!
n!\times\\a!\times\\b!\times\\(c-a)!\times\\(d-b)!
n!×a!×b!×(c−a)!×(d−b)!
(
m
o
d
p
)
(mod~p)
(mod p)
1、若n、m皆大于等于p,则两边模p的值都为零,显然成立
2、若n大于等于p,则只需证C(
c
×
p
+
d
c\times\\p+d
c×p+d,b)
≡
\equiv
≡
C
(
d
,
b
)
C(d,b)
C(d,b)(mod~p),这个显然成立,为什么,只需要将两边表示出来,十字相乘即可,读者可以自己思考
3、若n、m皆小于p,则即证C(b,d)
≡
\equiv
≡C(b,d)
(
m
o
d
p
)
(mod~p)
(mod p),显然成立,证毕
所以,Lucas定理成立,证毕
辗转相除法求最大公因数
这个东西一开始起始于中国,它的原理十分简单
即,若a|b,a|c,则a|(|b-c))
所以,我们设(b,c)=a
则,a|(max(b,c)-min(b,c))
则a|(b mod c,c),假设b比c大
这样我们就可以用递归来实现
代码如下:
int gcd (int a,int b)
{
if (a % b == 0) return b;
else return gcd (b,a % b);
}
Legendre定理
定理
设
n
!
=
p
1
w
1
×
p
2
w
2
×
p
3
w
3
×
…
…
×
p
t
w
t
设n!=p_1^{w_1}\times\\p2^{w_2}\times\\p3^{w_3}\times\\……\times\\p_t^{w_t}
设n!=p1w1×p2w2×p3w3×……×ptwt
其中,p1,p2,……,pt皆为质数
则,
w
i
w_i
wi=
∑
j
=
1
p
i
j
<
=
n
⌊
n
a
j
⌋
\sum_{j=1}^{p_i^{j}<=n}\lfloor \frac{n}{a^{j}}\rfloor
∑j=1pij<=n⌊ajn⌋
应用好处
这样我们就不用把高精乘,高精除打出来了,而且大大减少了时间复杂度,在之后的一些题中是十分有用的