持续更新。
upd2019.7.20 BSGS和拓展BSGS
upd.2019.8.7 欧拉定理和费马小定理
upd.2019.10.9 欧几里得和拓展欧几里得 + 中国剩余定理及其拓展 + 卢卡斯定理及拓展卢卡斯定理
线性筛
欧几里得和拓展欧几里得
一、 欧几里得定理
叫欧几里得定理的定理还挺多的,这里只是指辗转相除而已。用于求两个数的最小公因数。
二、 拓展欧几里得定理
拓欧求解的是这样一个式子:
a
x
+
b
y
=
g
c
d
(
a
,
b
)
ax+by=gcd(a,b)
a x + b y = g c d ( a , b )
已知
a
,
b
a,b
a , b ,求其中一对可行解
(
x
,
y
)
(x,y)
( x , y ) 。
考虑欧几里得求解最小公因数时的递归求解:
g
c
d
(
x
,
y
)
=
g
c
d
(
y
,
x
m
o
d
y
)
gcd(x,y)=gcd(y,x\; mod \; y)
g c d ( x , y ) = g c d ( y , x m o d y )
假如我们已经知道了
a
′
y
+
b
′
(
x
m
o
d
y
)
=
g
c
d
(
y
,
x
m
o
d
y
)
a'y+b'(x\; mod \; y)=gcd(y,x\; mod \; y)
a ′ y + b ′ ( x m o d y ) = g c d ( y , x m o d y )
那么把
x
m
o
d
y
x\; mod \; y
x m o d y 写成
x
−
⌊
x
y
⌋
y
x-\lfloor \frac{x}{y}\rfloor y
x − ⌊ y x ⌋ y ,再稍微整理一下式子,就可以得到
b
′
x
+
(
a
′
−
⌊
x
y
⌋
b
′
)
y
=
g
c
d
(
x
,
y
)
b'x+(a'-\lfloor \frac{x}{y}\rfloor b')y=gcd(x,y)
b ′ x + ( a ′ − ⌊ y x ⌋ b ′ ) y = g c d ( x , y )
也就是说
{
a
=
b
′
b
=
a
′
−
⌊
x
y
⌋
b
′
\begin{cases}a=b'\\ b=a'-\lfloor \frac{x}{y}\rfloor b' \end{cases}
{ a = b ′ b = a ′ − ⌊ y x ⌋ b ′
那我们就可以递归求解了,边界和gcd一样,当
y
=
0
y=0
y = 0 时,
1
∗
x
+
0
∗
y
=
x
=
g
c
d
(
x
,
y
)
1*x+0*y=x=gcd(x,y)
1 ∗ x + 0 ∗ y = x = g c d ( x , y ) 。
贴一个代码方便理解
template < class T > T exgcd ( T x, T y, T & a, T & b)
{
if ( y == 0 ) {
a = 1 ; b = 0 ;
return x;
}
T _a, _b;
T g = exgcd ( y, x % y, _a, _b) ;
a = _b;
b = _a - x / y * _b;
return g;
}
中国剩余定理及其扩展
一、中国剩余定理
问题:求解一个
x
x
x 满足
{
x
≡
a
1
(
m
o
d
m
1
)
x
≡
a
2
(
m
o
d
m
2
)
…
x
≡
a
n
(
m
o
d
m
n
)
\begin{cases}x \equiv a_1 (mod \; m_1) \\ x \equiv a_2 (mod \; m_2) \\ \dots \\ x \equiv a_n (mod \; m_n)\end{cases}
⎩ ⎪ ⎪ ⎪ ⎨ ⎪ ⎪ ⎪ ⎧ x ≡ a 1 ( m o d m 1 ) x ≡ a 2 ( m o d m 2 ) … x ≡ a n ( m o d m n )
保证所有的
m
i
m_i
m i 互质。
大致思路:对于每一个同余式
x
≡
a
1
(
m
o
d
m
1
)
x \equiv a_1 (mod \; m_1)
x ≡ a 1 ( m o d m 1 ) ,求出能被其他所有
m
j
(
m
j
≠
m
i
)
m_j(m_j\not=m_i)
m j ( m j = m i ) 整除,并且满足
x
≡
a
1
(
m
o
d
m
1
)
x \equiv a_1 (mod \; m_1)
x ≡ a 1 ( m o d m 1 ) 的
x
i
x_i
x i ,因为满足自己的式子,并且是其他模数的倍数,不会对其他式子产生影响,所以最后的答案就是
∑
x
i
\sum x_i
∑ x i 。
具体来说:
设
M
=
∏
m
i
M = \prod m_i
M = ∏ m i
M
i
=
M
/
m
i
M_i = M/m_i
M i = M / m i
M
i
t
i
≡
a
i
(
m
o
d
m
i
)
M_it_i\equiv a_i(mod \; m_i)
M i t i ≡ a i ( m o d m i )
所以
x
i
≡
M
i
t
i
(
m
o
d
M
)
x_i\equiv M_it_i(mod\; M)
x i ≡ M i t i ( m o d M )
x
=
∑
x
i
x=\sum x_i
x = ∑ x i
其中的
M
i
t
i
≡
a
i
(
m
o
d
m
i
)
M_it_i\equiv a_i(mod \; m_i)
M i t i ≡ a i ( m o d m i ) 可以用拓展欧几里得来求,上面刚刚讲过。
最小的非负整数解显然也可以求,就是
x
m
i
n
=
(
x
m
o
d
M
+
M
)
m
o
d
M
x_{min}=(x\; mod\; M+M)\; mod \; M
x m i n = ( x m o d M + M ) m o d M
二、拓展中国剩余定理
(废话:网上很多人说拓展CRT和CRT没什么关系,将两者割裂开来看,我觉得很fake。实际上exCRT的方法也是基于CRT答案的构造方法的。)
求解的问题和上面一样,但是少了一个条件,就是
m
i
m_i
m i 之间不一定保证互质。
{
x
≡
a
1
(
m
o
d
m
1
)
x
≡
a
2
(
m
o
d
m
2
)
…
x
≡
a
n
(
m
o
d
m
n
)
\begin{cases}x \equiv a_1 (mod \; m_1) \\ x \equiv a_2 (mod \; m_2) \\ \dots \\ x \equiv a_n (mod \; m_n)\end{cases}
⎩ ⎪ ⎪ ⎪ ⎨ ⎪ ⎪ ⎪ ⎧ x ≡ a 1 ( m o d m 1 ) x ≡ a 2 ( m o d m 2 ) … x ≡ a n ( m o d m n )
经过上面的启发,我们仍旧用类似的方法来构造一个可行解。
假设现在我们已经得到了前
k
−
1
k-1
k − 1 个方程的一个解,现在要把第
k
k
k 个加进去求前
k
k
k 个方程的解。
设前
k
−
1
k-1
k − 1 个的解为
x
k
−
1
x_{k-1}
x k − 1 ,前
k
−
1
k-1
k − 1 个
m
i
m_i
m i 的最小公倍数是
M
k
−
1
M_{k-1}
M k − 1 ,那么新的解
x
k
=
x
k
−
1
+
t
M
k
−
1
x_k=x_{k-1}+tM_{k-1}
x k = x k − 1 + t M k − 1
且
x
k
≡
a
k
(
m
o
d
m
k
)
x_k\equiv a_k (mod \; m_k)
x k ≡ a k ( m o d m k )
联立得
t
M
k
−
1
≡
a
k
−
x
k
−
1
(
m
o
d
m
k
)
tM_{k-1}\equiv a_k-x_{k-1} (mod \; m_k)
t M k − 1 ≡ a k − x k − 1 ( m o d m k )
下面就是拓欧的管辖范围了。把这个式子展开
t
M
k
−
1
+
s
⋅
m
k
=
a
k
−
x
k
−
1
tM_{k-1}+s\cdot m_k=a_k-x_{k-1}
t M k − 1 + s ⋅ m k = a k − x k − 1
假如
g
c
d
(
M
k
−
1
,
m
k
)
∤
a
k
−
x
k
−
1
gcd(M_{k-1},m_k)\nmid a_k-x_{k-1}
g c d ( M k − 1 , m k ) ∤ a k − x k − 1 就无解,不然就拓欧算出
t
t
t 得到新解,再假如第
k
+
1
k+1
k + 1 个式子。
卢卡斯定理及拓展卢卡斯定理
(废话:卢卡斯定理的证明和拓展卢卡斯的还是有很大区别的,不想上面的CRT这样联系紧密)
一、卢卡斯定理
求解的问题:
C
n
m
m
o
d
p
C_n^m\;mod\;p
C n m m o d p
其中
p
p
p 是质数。
需要求证:
C
n
m
≡
C
⌊
n
p
⌋
⌊
m
p
⌋
∗
C
n
m
o
d
p
m
m
o
d
p
(
m
o
d
p
)
C_n^m\equiv C_{\lfloor\frac{n}{p}\rfloor}^{\lfloor\frac{m}{p}\rfloor}*C_{n\;mod\;p}^{m\;mod\;p}(mod\;p)
C n m ≡ C ⌊ p n ⌋ ⌊ p m ⌋ ∗ C n m o d p m m o d p ( m o d p )
然后就可以递归求解了。
证明如下:
p
∣
C
p
i
(
1
≤
i
<
p
)
p \mid C_{p}^{i}(1 \le i < p)
p ∣ C p i ( 1 ≤ i < p )
很好证明,将组合数写成阶乘的形式
C
p
i
=
p
!
i
!
∗
(
p
−
i
)
!
=
p
i
∗
(
p
−
1
)
!
(
i
−
1
)
!
∗
(
p
−
i
)
!
=
p
i
C
p
−
1
i
−
1
C_p^i=\frac{p!}{i!*(p-i)!}=\frac{p}{i}*\frac{(p-1)!}{(i-1)!*(p-i)!}=\frac{p}{i}C_{p-1}^{i-1}
C p i = i ! ∗ ( p − i ) ! p ! = i p ∗ ( i − 1 ) ! ∗ ( p − i ) ! ( p − 1 ) ! = i p C p − 1 i − 1
得证。
由此,用二项式定理展开下面的式子可以推知:
(
1
+
x
)
p
≡
∑
i
=
0
p
C
p
i
x
i
=
C
p
0
∗
1
+
0
∗
x
+
0
∗
x
2
+
.
.
.
+
C
p
p
∗
x
p
≡
1
+
x
p
(
m
o
d
p
)
(1+x)^p\equiv \sum_{i=0}^{p}C_p^i x_i=C_p^0*1+0*x+0*x^2+...+C_p^p*x^p\equiv 1+x^p(mod\;p)
( 1 + x ) p ≡ i = 0 ∑ p C p i x i = C p 0 ∗ 1 + 0 ∗ x + 0 ∗ x 2 + . . . + C p p ∗ x p ≡ 1 + x p ( m o d p )
接下来证明定理:
假设
n
=
a
p
+
b
,
m
=
c
p
+
d
(
0
≤
b
,
d
<
p
)
n=ap+b,m=cp+d(0\le b,d<p)
n = a p + b , m = c p + d ( 0 ≤ b , d < p ) ,则
C
n
m
=
C
a
p
+
b
c
p
+
d
C_n^m=C_{ap+b}^{cp+d}
C n m = C a p + b c p + d
用上引理1的推论:
(
1
+
x
)
n
=
(
1
+
x
)
p
∗
a
∗
(
1
+
x
)
b
≡
(
1
+
x
p
)
a
∗
(
1
+
x
)
b
(
m
o
d
p
)
(1+x)^n=(1+x)^{p*a}*(1+x)^b \equiv (1+x^p)^a*(1+x)^b(mod\;p)
( 1 + x ) n = ( 1 + x ) p ∗ a ∗ ( 1 + x ) b ≡ ( 1 + x p ) a ∗ ( 1 + x ) b ( m o d p )
二项式定理展开,观察左边的式子
x
m
x^m
x m 的系数和右边式子
x
c
p
+
d
x^{cp+d}
x c p + d 的系数,
C
n
m
≡
C
a
c
∗
C
b
d
(
m
o
d
p
)
C_n^m\equiv C_a^c*C_b^d(mod\;p)
C n m ≡ C a c ∗ C b d ( m o d p )
即
C
n
m
≡
C
⌊
n
p
⌋
⌊
m
p
⌋
∗
C
n
m
o
d
p
m
m
o
d
p
(
m
o
d
p
)
C_n^m\equiv C_{\lfloor\frac{n}{p}\rfloor}^{\lfloor\frac{m}{p}\rfloor}*C_{n\;mod\;p}^{m\;mod\;p}(mod\;p)
C n m ≡ C ⌊ p n ⌋ ⌊ p m ⌋ ∗ C n m o d p m m o d p ( m o d p )
证毕。
二、拓展卢卡斯定理
需要解决的问题是:
C
n
m
m
o
d
p
C_n^m\;mod\;p
C n m m o d p
其中
p
p
p 并没有限制。
尝试简化问题。
容易想到,将
p
p
p 质因数分解为
p
=
∏
p
i
k
i
p=\prod p_i^{k_i}
p = ∏ p i k i 。
求解
C
n
m
m
o
d
p
i
k
i
C_n^m\;mod\;p_i^{k_i}
C n m m o d p i k i ,然后用中国剩余定理(上面有)合并,即
n
!
m
!
(
n
−
m
)
!
m
o
d
p
i
k
i
\frac{n!}{m!(n-m)!}\;mod\;p_i^{k_i}
m ! ( n − m ) ! n ! m o d p i k i
因为并不能直接求逆元,所以将上下阶乘除
p
i
p_i
p i 一直除到没有
p
i
p_i
p i 这个因子为止,式子长下面这个样子
n
!
p
x
m
!
p
y
∗
(
n
−
m
)
!
p
z
∗
p
i
x
−
y
−
z
m
o
d
p
i
k
i
\frac{\frac{n!}{p^x}}{\frac{m!}{p^y}*\frac{(n-m)!}{p^z}}*p_i^{x-y-z}\; mod\;p_i^{k_i}
p y m ! ∗ p z ( n − m ) ! p x n ! ∗ p i x − y − z m o d p i k i
假如能够求
n
!
p
x
m
o
d
p
k
\frac{n!}{p^x}\; mod\;p^{k}
p x n ! m o d p k ,那么问题就解决了。
事实上这个东西可以递归去求,方法如下:
将
1
1
1 到
n
n
n 的数分为
p
p
p 的倍数和不是
p
p
p 的倍数,不是
p
p
p 的倍数的数
O
(
p
k
)
O(p^k)
O ( p k ) 暴力计算(假如题目保证一个
p
k
p^k
p k 不会太大的话也可以预处理),
p
p
p 的倍数递归。
n
!
=
(
1
∗
2
∗
.
.
.
∗
(
p
−
1
)
∗
(
p
+
1
)
∗
.
.
.
∗
(
p
k
−
1
)
)
⌊
n
p
k
⌋
∗
(
1
∗
2
∗
(
p
−
1
)
∗
(
p
+
1
)
∗
.
.
.
∗
(
n
m
o
d
p
k
)
)
∗
p
∗
⌊
n
p
⌋
!
\begin{aligned} &n! \\=&(1*2*...*(p-1)*(p+1)*...*(p^k-1))^{\lfloor\frac{n}{p^k}\rfloor} \\&*(1*2*(p-1)*(p+1)*...*(n\;mod\;p^k)) \\&*p*\lfloor\frac{n}{p}\rfloor! \end{aligned}
= n ! ( 1 ∗ 2 ∗ . . . ∗ ( p − 1 ) ∗ ( p + 1 ) ∗ . . . ∗ ( p k − 1 ) ) ⌊ p k n ⌋ ∗ ( 1 ∗ 2 ∗ ( p − 1 ) ∗ ( p + 1 ) ∗ . . . ∗ ( n m o d p k ) ) ∗ p ∗ ⌊ p n ⌋ !
如上面所说,得到这样的方程组
{
C
n
m
≡
a
1
(
m
o
d
p
1
k
1
)
C
n
m
≡
a
2
(
m
o
d
p
2
k
2
)
…
C
n
m
≡
a
n
(
m
o
d
p
n
k
n
)
\begin{cases}C_n^m \equiv a_1 (mod \; p_1^{k_1}) \\ C_n^m \equiv a_2 (mod \; p_2^{k_2}) \\ \dots \\ C_n^m \equiv a_n (mod \;p_n^{k_n})\end{cases}
⎩ ⎪ ⎪ ⎪ ⎨ ⎪ ⎪ ⎪ ⎧ C n m ≡ a 1 ( m o d p 1 k 1 ) C n m ≡ a 2 ( m o d p 2 k 2 ) … C n m ≡ a n ( m o d p n k n )
贴上中国剩余定理板子,完成啦!!!
总复杂度大概
O
(
P
log
P
)
O(P\log P)
O ( P log P ) 。
一个是CRT的复杂度
O
(
n
log
p
)
O(n\log p)
O ( n log p ) (n是质因子个数,p是最大的质因子大小)
还有一个是递归求阶乘,递归
log
p
k
n
\log_{p^k} n
log p k n 层,每层都
O
(
p
k
)
O(p^k)
O ( p k ) 爆扫,复杂度与
O
(
P
log
P
)
O(P\log P)
O ( P log P ) 同阶。
假如预处理而不是
O
(
p
k
)
O(p^k)
O ( p k ) 爆扫,复杂度可以降到
O
(
∑
p
k
+
T
log
p
k
n
)
O(\sum p^k+T\log_{p^k} n)
O ( ∑ p k + T log p k n ) (其中T是数据组数)。
流程比较长,但是层次分明。虽然只是一个模板,但也可以说是数论各种定理的综合应用。贴个代码方便理解:
namespace exLucas
{
typedef long long LL;
LL M, ans;
LL fpow ( LL x, LL y, LL p) {
LL ret = 1 ;
while ( y) {
if ( y & 1 ) ret = ret * x % p;
x = x * x % p;
y >>= 1 ;
}
return ret;
}
LL exgcd ( LL x, LL y, LL & a, LL & b) {
if ( y == 0 ) {
a = 1 ; b = 0 ;
return x;
}
LL _a, _b;
LL g = exgcd ( y, x % y, _a, _b) ;
a = _b;
b = _a - x / y * _b;
return g;
}
LL inv ( LL x, LL p) {
LL tmp1, tmp2;
exgcd ( x, p, tmp1, tmp2) ;
return ( tmp1 % p + p) % p;
}
LL fac ( LL n, LL p, LL pk) {
if ( n == 0 ) return 1 ;
LL ret = 1 ;
for ( LL i = 2 ; i < pk; ++ i) if ( i% p) ( ret * = i) % = pk;
ret = fpow ( ret, n/ pk, pk) ;
for ( LL i = 2 , sz = n% pk; i <= sz; ++ i) if ( i% p) ( ret * = i) % = pk;
return ret * fac ( n / p, p, pk) % pk;
}
LL C ( LL n, LL m, LL p, LL pk) {
LL cnt = 0 ;
for ( LL i = n; i; i / = p) cnt + = i / p;
for ( LL i = m; i; i / = p) cnt - = i / p;
for ( LL i = n- m; i; i / = p) cnt - = i / p;
return fac ( n, p, pk) * inv ( fac ( m, p, pk) , pk) % pk * inv ( fac ( n- m, p, pk) , pk) % pk * fpow ( p, cnt, pk) % pk;
}
LL CRT ( LL a, LL b) { return a * inv ( M / b, b) % M * ( M / b) % M; }
LL exLucas ( LL n, LL m, LL p) {
M = p; ans = 0 ;
for ( LL i = 2 , sz = sqrt ( p) + 1 ; i <= sz; ++ i)
if ( p % i == 0 ) {
LL pk = 1 ;
while ( p % i == 0 )
pk * = i, p / = i;
( ans + = CRT ( C ( n, m, i, pk) , pk) ) % = M;
}
if ( p > 1 ) ( ans + = CRT ( C ( n, m, p, p) , p) ) % = M;
return ans;
}
}
欧拉函数
费马小定理
内容:p是质数且a不是p的倍数时,
a
p
−
1
≡
1
(
m
o
d
p
)
a^{p-1}\equiv 1(mod\; p)
a p − 1 ≡ 1 ( m o d p )
是欧拉定理的一个特殊情况,证明略。
欧拉定理与拓展
一、
欧拉定理内容:在a与m互质的情况下,
a
φ
(
m
)
≡
1
(
m
o
d
m
)
a^{\varphi(m)}\equiv 1(mod\; m)
a φ ( m ) ≡ 1 ( m o d m )
证明如下:
设
[
1
,
m
]
[1,m]
[ 1 , m ] 中与m互质的数为
x
1
,
x
2
,
.
.
.
,
x
φ
(
m
)
x_1, x_2, ... , x_{\varphi(m)}
x 1 , x 2 , . . . , x φ ( m )
设
p
1
=
a
x
1
,
p
2
=
a
x
2
,
.
.
.
,
p
φ
(
m
)
=
a
x
φ
(
m
)
p_1=ax_1,p_2=ax_2,..., p_{\varphi(m)}=ax_{\varphi(m)}
p 1 = a x 1 , p 2 = a x 2 , . . . , p φ ( m ) = a x φ ( m )
引理1:
∀
i
,
j
∈
[
1
,
φ
(
m
)
]
,
i
=
j̸
,
p
i
≡
̸
p
j
(
m
o
d
m
)
\forall i,j\in [1,\varphi(m)],i=\not j,p_i\equiv\not p_j(mod\; m)
∀ i , j ∈ [ 1 , φ ( m ) ] , i = j , p i ≡ p j ( m o d m )
使用反证法,假设存在
p
i
≡
p
j
(
m
o
d
m
)
p_i\equiv p_j(mod\; m)
p i ≡ p j ( m o d m ) ,那么
a
(
x
i
−
x
j
)
≡
0
(
m
o
d
m
)
a(x_i-x_j)\equiv 0(mod\; m)
a ( x i − x j ) ≡ 0 ( m o d m ) ,即
a
(
x
i
−
x
j
)
=
k
m
a(x_i-x_j)=km
a ( x i − x j ) = k m ,又因为
(
x
i
−
x
j
)
=
0̸
(x_i-x_j)=\not 0
( x i − x j ) = 0 且
a
a
a 和
m
m
m 互质,所以等式恒不成立。证毕。
引理2:
∀
i
∈
[
1
,
φ
(
m
)
]
,
g
c
d
(
p
i
,
m
)
=
1
\forall i\in [1,\varphi(m)],gcd(p_i,m)=1
∀ i ∈ [ 1 , φ ( m ) ] , g c d ( p i , m ) = 1
使用显然法,因为
p
i
=
a
x
i
p_i=ax_i
p i = a x i ,
g
c
d
(
a
,
m
)
=
1
,
g
c
d
(
x
i
,
m
)
=
1
gcd(a,m)=1,gcd(x_i,m)=1
g c d ( a , m ) = 1 , g c d ( x i , m ) = 1 ,所以
g
c
d
(
p
i
,
m
)
=
1
gcd(p_i,m)=1
g c d ( p i , m ) = 1 。
由此可知
{
x
1
,
.
.
.
x
φ
(
m
)
}
=
{
p
1
m
o
d
m
,
.
.
.
,
p
φ
(
m
)
m
o
d
m
}
\{x_1,...x_{\varphi(m)}\}=\{p_1\;mod\;m,...,p_{\varphi(m)}\;mod\;m\}
{ x 1 , . . . x φ ( m ) } = { p 1 m o d m , . . . , p φ ( m ) m o d m } 因为两个集合中的元素都与
m
m
m 互质,且在
[
1
,
m
]
[1,m]
[ 1 , m ] 中不存在集合之外的数与m互质,所以一个
p
i
m
o
d
m
p_i\;mod\;m
p i m o d m 一定能找到一个
x
j
x_j
x j 与他相等。
所以
∏
x
i
≡
∏
p
i
(
m
o
d
m
)
\prod x_i\equiv \prod p_i(mod\;m)
∏ x i ≡ ∏ p i ( m o d m ) 两边同除
∏
x
i
\prod x_i
∏ x i ,得到
a
φ
(
m
)
≡
1
(
m
o
d
m
)
a^{\varphi(m)}\equiv1(mod\;m)
a φ ( m ) ≡ 1 ( m o d m )
证毕。
二、
拓展欧拉定理多讨论了
a
a
a 与
m
m
m 不互质的情况,
a
c
=
{
a
c
m
o
d
φ
(
m
)
,
g
c
d
(
a
,
m
)
=
1
a
c
,
g
c
d
(
a
,
m
)
=
1̸
,
c
<
φ
(
m
)
a
c
m
o
d
φ
(
m
)
+
φ
(
m
)
,
g
c
d
(
a
,
m
)
=
1̸
,
c
≥
φ
(
m
)
a^c=\left\{ \begin{aligned} &a^{c\;mod\;\varphi(m)}, &gcd(a,m)=1 \\ &a^c,&gcd(a,m)=\not 1,c < \varphi(m) \\ &a^{c\;mod\;\varphi(m)+\varphi(m)},&gcd(a, m)=\not1,c \ge \varphi(m) \end{aligned} \right.
a c = ⎩ ⎪ ⎪ ⎨ ⎪ ⎪ ⎧ a c m o d φ ( m ) , a c , a c m o d φ ( m ) + φ ( m ) , g c d ( a , m ) = 1 g c d ( a , m ) = 1 , c < φ ( m ) g c d ( a , m ) = 1 , c ≥ φ ( m )
下面证明
a
c
=
a
c
m
o
d
φ
(
m
)
+
φ
(
m
)
,
g
c
d
(
a
,
m
)
=
1̸
,
c
≥
φ
(
m
)
a^c=a^{c\;mod\;\varphi(m)+\varphi(m)},gcd(a, m)=\not1,c \ge \varphi(m)
a c = a c m o d φ ( m ) + φ ( m ) , g c d ( a , m ) = 1 , c ≥ φ ( m ) :
引理1:
∀
p
∈
P
,
x
≤
φ
(
p
x
)
\forall p\in \mathbb{P},x\le \varphi(p^x)
∀ p ∈ P , x ≤ φ ( p x )
首先,
φ
(
p
x
)
=
(
p
−
1
)
p
x
−
1
\varphi(p^x)=(p-1)p^{x-1}
φ ( p x ) = ( p − 1 ) p x − 1
当
p
=
2
p=2
p = 2 时,使用数学归纳法,
x
=
1
x=1
x = 1 时等式左右都为1,在
x
>
1
x>1
x > 1 时,x每增加1,不等式左边加1,右边乘2(加上右边的数),因为满足右边的数大于等于1,所以不等式仍旧成立。
当
p
>
2
p>2
p > 2 时,
x
≤
2
x
−
1
≤
(
p
−
1
)
p
x
−
1
x\le 2^{x-1}\le (p-1)p^{x-1}
x ≤ 2 x − 1 ≤ ( p − 1 ) p x − 1 ,成立。
证毕。
引理2:
对于任意质数p满足
p
c
=
p
c
+
φ
(
m
)
,
p
∣
m
,
c
≥
φ
(
m
)
p^c=p^{c+\varphi(m)},p|m,c \ge \varphi(m)
p c = p c + φ ( m ) , p ∣ m , c ≥ φ ( m )
令
m
=
s
⋅
p
k
,
g
c
d
(
s
,
p
)
=
1
m=s\cdot p^k,gcd(s,p)=1
m = s ⋅ p k , g c d ( s , p ) = 1 ,首先由欧拉定理得
p
φ
(
s
)
≡
1
(
m
o
d
s
)
p^{\varphi(s)}\equiv1(mod\;s)
p φ ( s ) ≡ 1 ( m o d s ) 由欧拉函数定义式可知
φ
(
s
)
∣
φ
(
m
)
\varphi(s)|\varphi(m)
φ ( s ) ∣ φ ( m ) ,所以
p
φ
(
m
)
≡
1
(
m
o
d
s
)
p^{\varphi(m)}\equiv1(mod\;s)
p φ ( m ) ≡ 1 ( m o d s )
由同余的性质,两边同乘
p
k
p^k
p k 得
p
φ
(
m
)
+
k
≡
p
k
(
m
o
d
m
)
p^{\varphi(m)+k}\equiv p^k(mod\;m)
p φ ( m ) + k ≡ p k ( m o d m )
因为
c
≥
φ
(
m
)
≥
k
c\ge \varphi(m) \ge k
c ≥ φ ( m ) ≥ k 所以
p
c
=
p
c
−
k
p
k
=
p
c
+
φ
(
m
)
,
p
∣
m
,
c
≥
φ
(
m
)
p^c=p^{c-k}p^k=p^{c+\varphi(m)},p|m,c \ge \varphi(m)
p c = p c − k p k = p c + φ ( m ) , p ∣ m , c ≥ φ ( m )
由引理2可知,
p
c
≡
p
c
m
o
d
φ
(
m
)
+
φ
(
m
)
,
p
∣
m
,
c
≥
φ
(
m
)
p^c\equiv p^{c\;mod\;\varphi(m)+\varphi(m)},p|m,c \ge \varphi(m)
p c ≡ p c m o d φ ( m ) + φ ( m ) , p ∣ m , c ≥ φ ( m )
随后利用同余的性质和唯一分解定理,可以证得
a
c
=
a
c
m
o
d
φ
(
m
)
+
φ
(
m
)
,
g
c
d
(
a
,
m
)
=
1̸
,
c
≥
φ
(
m
)
a^c=a^{c\;mod\;\varphi(m)+\varphi(m)},gcd(a, m)=\not1,c \ge \varphi(m)
a c = a c m o d φ ( m ) + φ ( m ) , g c d ( a , m ) = 1 , c ≥ φ ( m )
乘法逆元的三种求法
卡特兰数
斯特林数
原根和指标
BSGS和拓展BSGS
用于求形如
a
x
≡
b
(
m
o
d
p
)
a^x\equiv b(mod \; p)
a x ≡ b ( m o d p ) 的高次同余方程
思想很简单,利用分块,把
x
x
x 看成
x
=
p
∗
i
−
j
x=\sqrt{p}*i-j
x = p
∗ i − j ,然后式子变成这个样子
a
p
∗
i
≡
b
∗
a
j
(
m
o
d
p
)
a^{\sqrt{p}*i}\equiv b*a^j(mod\; p)
a p
∗ i ≡ b ∗ a j ( m o d p )
但是假如
a
a
a 和
p
p
p 不互质的话,由下面那个式子并不能推出上面那个式子,举个简单的例子:
2
≡
6
(
m
o
d
4
)
1
≡
3̸
(
m
o
d
4
)
2\equiv 6(mod \; 4) \\ 1\equiv\not 3(mod \; 4)
2 ≡ 6 ( m o d 4 ) 1 ≡ 3 ( m o d 4 )
所以我们需要除掉
a
a
a 和
p
p
p 的公约数来使
a
a
a 和
p
p
p 互质,这就是ex_BSGS,
a
k
∏
g
i
a
x
≡
b
∏
g
i
(
m
o
d
b
∏
g
i
)
\frac{a^k}{\prod g_i}a^x\equiv \frac{b}{\prod g_i}(mod \; \frac{b}{\prod g_i})
∏ g i a k a x ≡ ∏ g i b ( m o d ∏ g i b )
好像也就只能求这么一个式子,简直太没用了 。
某次课的笔记
g
c
d
(
a
,
b
)
=
(
a
,
b
)
gcd(a, b) = (a, b)
g c d ( a , b ) = ( a , b )
l
c
m
(
a
,
b
)
=
[
a
,
b
]
lcm(a, b) = [a, b]
l c m ( a , b ) = [ a , b ]
b
≤
a
,
a
%
b
≤
a
/
2
b \le a , a \% b \le a / 2
b ≤ a , a % b ≤ a / 2
唯一分解定理
同余性质:
弱化
a
≡
b
(
m
o
d
m
)
,
n
∣
m
,
∴
a
≡
b
(
m
o
d
n
)
a \equiv b(mod \; m), n|m, \therefore a \equiv b(mod \; n)
a ≡ b ( m o d m ) , n ∣ m , ∴ a ≡ b ( m o d n )
除法
a
c
≡
b
c
(
m
o
d
c
)
,
a
≡
b
(
m
o
d
c
/
g
c
d
(
c
,
m
)
)
ac \equiv bc (mod \; c), a \equiv b (mod \; c/gcd(c, m))
a c ≡ b c ( m o d c ) , a ≡ b ( m o d c / g c d ( c , m ) )
中国剩余定理
{
x
≡
a
1
(
m
o
d
m
1
)
x
≡
a
2
(
m
o
d
m
2
)
…
x
≡
a
n
(
m
o
d
m
n
)
\begin{cases}x \equiv a_1 (mod \; m_1) \\ x \equiv a_2 (mod \; m_2) \\ \dots \\ x \equiv a_n (mod \; m_n)\end{cases}
⎩ ⎪ ⎪ ⎪ ⎨ ⎪ ⎪ ⎪ ⎧ x ≡ a 1 ( m o d m 1 ) x ≡ a 2 ( m o d m 2 ) … x ≡ a n ( m o d m n )
M
=
∏
m
i
M
i
=
M
/
m
i
t
i
≡
M
i
−
1
(
m
o
d
m
i
)
M = \prod m_i \\ M_i = M/m_i \\ t_i\equiv M_i^{-1}(mod \; m_i)
M = ∏ m i M i = M / m i t i ≡ M i − 1 ( m o d m i ) $$
拓展中国剩余定理
费马小定理
欧拉函数
ϕ
(
n
)
=
n
∗
∏
(
p
i
−
1
)
/
p
i
\phi(n)=n*\prod(p_i-1)/p_i
ϕ ( n ) = n ∗ ∏ ( p i − 1 ) / p i
积性函数
ϕ
(
n
m
)
=
ϕ
(
n
)
ϕ
(
m
)
,
(
g
c
d
(
n
,
m
)
=
1
)
\phi(nm)=\phi(n)\phi(m),(gcd(n,m)=1)
ϕ ( n m ) = ϕ ( n ) ϕ ( m ) , ( g c d ( n , m ) = 1 )
线性筛算
ϕ
\phi
ϕ 函数
欧拉定理
g
c
d
(
a
,
m
)
=
1
,
a
ϕ
(
m
)
≡
1
(
m
o
d
m
)
gcd(a, m) =1,a^{\phi(m)}\equiv 1(mod \; m)
g c d ( a , m ) = 1 , a ϕ ( m ) ≡ 1 ( m o d m )
拓展欧几里得
线性方程组一般解法
{
x
≡
a
1
(
m
o
d
m
1
)
x
≡
a
2
(
m
o
d
m
2
)
\begin{cases}x \equiv a_1 (mod \; m_1) \\ x \equiv a_2 (mod \; m_2) \end{cases}
{ x ≡ a 1 ( m o d m 1 ) x ≡ a 2 ( m o d m 2 )
防爆LL的快速幂式乘法
n
1
+
n
2
+
⋯
+
n
n
=
O
(
n
l
n
(
n
)
)
\frac{n}{1}+\frac{n}{2}+\dots+\frac{n}{n}=O(n ln(n))
1 n + 2 n + ⋯ + n n = O ( n l n ( n ) )
[NOI2015]寿司晚宴
dirichlet卷积
(
f
∗
g
)
(
n
)
=
∑
d
∣
n
f
(
d
)
g
(
n
d
)
(f*g)(n)=\sum_{d|n} f(d)g(\frac{n}{d})
( f ∗ g ) ( n ) = d ∣ n ∑ f ( d ) g ( d n )
常见数论函数