持续更新。
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) ax+by=gcd(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) gcd(x,y)=gcd(y,xmody)
假如我们已经知道了
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′(xmody)=gcd(y,xmody)
那么把 x m o d y x\; mod \; y xmody写成 x − ⌊ x y ⌋ y x-\lfloor \frac{x}{y}\rfloor y x−⌊yx⌋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′−⌊yx⌋b′)y=gcd(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′−⌊yx⌋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=gcd(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≡a1(modm1)x≡a2(modm2)…x≡an(modmn)
保证所有的 m i m_i mi互质。
大致思路:对于每一个同余式 x ≡ a 1 ( m o d m 1 ) x \equiv a_1 (mod \; m_1) x≡a1(modm1),求出能被其他所有 m j ( m j ≠ m i ) m_j(m_j\not=m_i) mj(mj=mi)整除,并且满足 x ≡ a 1 ( m o d m 1 ) x \equiv a_1 (mod \; m_1) x≡a1(modm1)的 x i x_i xi,因为满足自己的式子,并且是其他模数的倍数,不会对其他式子产生影响,所以最后的答案就是 ∑ x i \sum x_i ∑xi。
具体来说:
设
M = ∏ m i M = \prod m_i M=∏mi
M i = M / m i M_i = M/m_i Mi=M/mi
M i t i ≡ a i ( m o d m i ) M_it_i\equiv a_i(mod \; m_i) Miti≡ai(modmi)
所以
x i ≡ M i t i ( m o d M ) x_i\equiv M_it_i(mod\; M) xi≡Miti(modM)
x = ∑ x i x=\sum x_i x=∑xi
其中的 M i t i ≡ a i ( m o d m i ) M_it_i\equiv a_i(mod \; m_i) Miti≡ai(modmi)可以用拓展欧几里得来求,上面刚刚讲过。
最小的非负整数解显然也可以求,就是 x m i n = ( x m o d M + M ) m o d M x_{min}=(x\; mod\; M+M)\; mod \; M xmin=(xmodM+M)modM
二、拓展中国剩余定理
(废话:网上很多人说拓展CRT和CRT没什么关系,将两者割裂开来看,我觉得很fake。实际上exCRT的方法也是基于CRT答案的构造方法的。)
求解的问题和上面一样,但是少了一个条件,就是 m i m_i mi之间不一定保证互质。
{ 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≡a1(modm1)x≡a2(modm2)…x≡an(modmn)
经过上面的启发,我们仍旧用类似的方法来构造一个可行解。
假设现在我们已经得到了前 k − 1 k-1 k−1个方程的一个解,现在要把第 k k k个加进去求前 k k k个方程的解。
设前 k − 1 k-1 k−1个的解为 x k − 1 x_{k-1} xk−1,前 k − 1 k-1 k−1个 m i m_i mi的最小公倍数是 M k − 1 M_{k-1} Mk−1,那么新的解
x k = x k − 1 + t M k − 1 x_k=x_{k-1}+tM_{k-1} xk=xk−1+tMk−1
且
x k ≡ a k ( m o d m k ) x_k\equiv a_k (mod \; m_k) xk≡ak(modmk)
联立得
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) tMk−1≡ak−xk−1(modmk)
下面就是拓欧的管辖范围了。把这个式子展开
t M k − 1 + s ⋅ m k = a k − x k − 1 tM_{k-1}+s\cdot m_k=a_k-x_{k-1} tMk−1+s⋅mk=ak−xk−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} gcd(Mk−1,mk)∤ak−xk−1就无解,不然就拓欧算出 t t t得到新解,再假如第 k + 1 k+1 k+1个式子。
卢卡斯定理及拓展卢卡斯定理
(废话:卢卡斯定理的证明和拓展卢卡斯的还是有很大区别的,不想上面的CRT这样联系紧密)
一、卢卡斯定理
求解的问题:
C n m m o d p C_n^m\;mod\;p Cnmmodp
其中 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) Cnm≡C⌊pn⌋⌊pm⌋∗Cnmodpmmodp(modp)
然后就可以递归求解了。
证明如下:
- 引理1:
p ∣ C p i ( 1 ≤ i < p ) p \mid C_{p}^{i}(1 \le i < p) p∣Cpi(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} Cpi=i!∗(p−i)!p!=ip∗(i−1)!∗(p−i)!(p−1)!=ipCp−1i−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∑pCpixi=Cp0∗1+0∗x+0∗x2+...+Cpp∗xp≡1+xp(modp)
接下来证明定理:
假设 n = a p + b , m = c p + d ( 0 ≤ b , d < p ) n=ap+b,m=cp+d(0\le b,d<p) n=ap+b,m=cp+d(0≤b,d<p),则
C n m = C a p + b c p + d C_n^m=C_{ap+b}^{cp+d} Cnm=Cap+bcp+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+xp)a∗(1+x)b(modp)
二项式定理展开,观察左边的式子 x m x^m xm的系数和右边式子 x c p + d x^{cp+d} xcp+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) Cnm≡Cac∗Cbd(modp)
即
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) Cnm≡C⌊pn⌋⌊pm⌋∗Cnmodpmmodp(modp)
证毕。
二、拓展卢卡斯定理
需要解决的问题是:
C n m m o d p C_n^m\;mod\;p Cnmmodp
其中 p p p并没有限制。
尝试简化问题。
- Part One:组合数对质数的幂取模
容易想到,将 p p p质因数分解为 p = ∏ p i k i p=\prod p_i^{k_i} p=∏piki。
求解 C n m m o d p i k i C_n^m\;mod\;p_i^{k_i} Cnmmodpiki,然后用中国剩余定理(上面有)合并,即
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!modpiki
- Part Two:阶乘除去质因子之后模质数幂
因为并不能直接求逆元,所以将上下阶乘除 p i p_i pi一直除到没有 p i p_i pi这个因子为止,式子长下面这个样子
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} pym!∗pz(n−m)!pxn!∗pix−y−zmodpiki
假如能够求 n ! p x m o d p k \frac{n!}{p^x}\; mod\;p^{k} pxn!modpk,那么问题就解决了。
事实上这个东西可以递归去求,方法如下:
将 1 1 1到 n n n的数分为 p p p的倍数和不是 p p p的倍数,不是 p p p的倍数的数 O ( p k ) O(p^k) O(pk)暴力计算(假如题目保证一个 p k p^k pk不会太大的话也可以预处理), 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)∗...∗(pk−1))⌊pkn⌋∗(1∗2∗(p−1)∗(p+1)∗...∗(nmodpk))∗p∗⌊pn⌋!
- Part Three:中国剩余定理合并
如上面所说,得到这样的方程组
{ 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} ⎩⎪⎪⎪⎨⎪⎪⎪⎧Cnm≡a1(modp1k1)Cnm≡a2(modp2k2)…Cnm≡an(modpnkn)
贴上中国剩余定理板子,完成啦!!!
总复杂度大概 O ( P log P ) O(P\log P) O(PlogP)。
一个是CRT的复杂度 O ( n log p ) O(n\log p) O(nlogp)(n是质因子个数,p是最大的质因子大小)
还有一个是递归求阶乘,递归 log p k n \log_{p^k} n logpkn层,每层都 O ( p k ) O(p^k) O(pk)爆扫,复杂度与 O ( P log P ) O(P\log P) O(PlogP)同阶。
假如预处理而不是 O ( p k ) O(p^k) O(pk)爆扫,复杂度可以降到 O ( ∑ p k + T log p k n ) O(\sum p^k+T\log_{p^k} n) O(∑pk+Tlogpkn)(其中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) ap−1≡1(modp)
是欧拉定理的一个特殊情况,证明略。
欧拉定理与拓展
一、
欧拉定理内容:在a与m互质的情况下,
a φ ( m ) ≡ 1 ( m o d m ) a^{\varphi(m)}\equiv 1(mod\; m) aφ(m)≡1(modm)
证明如下:
设 [ 1 , m ] [1,m] [1,m]中与m互质的数为 x 1 , x 2 , . . . , x φ ( m ) x_1, x_2, ... , x_{\varphi(m)} x1,x2,...,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)} p1=ax1,p2=ax2,...,pφ(m)=axφ(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,pi≡pj(modm)
使用反证法,假设存在 p i ≡ p j ( m o d m ) p_i\equiv p_j(mod\; m) pi≡pj(modm),那么 a ( x i − x j ) ≡ 0 ( m o d m ) a(x_i-x_j)\equiv 0(mod\; m) a(xi−xj)≡0(modm),即 a ( x i − x j ) = k m a(x_i-x_j)=km a(xi−xj)=km,又因为 ( x i − x j ) = 0̸ (x_i-x_j)=\not 0 (xi−xj)=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)],gcd(pi,m)=1
使用显然法,因为 p i = a x i p_i=ax_i pi=axi, g c d ( a , m ) = 1 , g c d ( x i , m ) = 1 gcd(a,m)=1,gcd(x_i,m)=1 gcd(a,m)=1,gcd(xi,m)=1,所以 g c d ( p i , m ) = 1 gcd(p_i,m)=1 gcd(pi,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\} {x1,...xφ(m)}={p1modm,...,pφ(m)modm}因为两个集合中的元素都与 m m m互质,且在 [ 1 , m ] [1,m] [1,m]中不存在集合之外的数与m互质,所以一个 p i m o d m p_i\;mod\;m pimodm一定能找到一个 x j x_j xj与他相等。
所以 ∏ x i ≡ ∏ p i ( m o d m ) \prod x_i\equiv \prod p_i(mod\;m) ∏xi≡∏pi(modm)两边同除 ∏ x i \prod x_i ∏xi,得到 a φ ( m ) ≡ 1 ( m o d m ) a^{\varphi(m)}\equiv1(mod\;m) aφ(m)≡1(modm)
证毕。
二、
拓展欧拉定理多讨论了 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. ac=⎩⎪⎪⎨⎪⎪⎧acmodφ(m),ac,acmodφ(m)+φ(m),gcd(a,m)=1gcd(a,m)=1,c<φ(m)gcd(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) ac=acmodφ(m)+φ(m),gcd(a,m)=1,c≥φ(m):
引理1:
∀ p ∈ P , x ≤ φ ( p x ) \forall p\in \mathbb{P},x\le \varphi(p^x) ∀p∈P,x≤φ(px)
首先, φ ( p x ) = ( p − 1 ) p x − 1 \varphi(p^x)=(p-1)p^{x-1} φ(px)=(p−1)px−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≤2x−1≤(p−1)px−1,成立。
证毕。
引理2:
对于任意质数p满足 p c = p c + φ ( m ) , p ∣ m , c ≥ φ ( m ) p^c=p^{c+\varphi(m)},p|m,c \ge \varphi(m) pc=pc+φ(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⋅pk,gcd(s,p)=1,首先由欧拉定理得 p φ ( s ) ≡ 1 ( m o d s ) p^{\varphi(s)}\equiv1(mod\;s) pφ(s)≡1(mods)由欧拉函数定义式可知 φ ( s ) ∣ φ ( m ) \varphi(s)|\varphi(m) φ(s)∣φ(m),所以 p φ ( m ) ≡ 1 ( m o d s ) p^{\varphi(m)}\equiv1(mod\;s) pφ(m)≡1(mods)
由同余的性质,两边同乘 p k p^k pk得 p φ ( m ) + k ≡ p k ( m o d m ) p^{\varphi(m)+k}\equiv p^k(mod\;m) pφ(m)+k≡pk(modm)
因为 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) pc=pc−kpk=pc+φ(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) pc≡pcmodφ(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) ac=acmodφ(m)+φ(m),gcd(a,m)=1,c≥φ(m)
乘法逆元的三种求法
卡特兰数
斯特林数
原根和指标
BSGS和拓展BSGS
用于求形如 a x ≡ b ( m o d p ) a^x\equiv b(mod \; p) ax≡b(modp)的高次同余方程
思想很简单,利用分块,把 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) ap∗i≡b∗aj(modp)
但是假如 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(mod4)1≡3(mod4)
所以我们需要除掉 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}) ∏giakax≡∏gib(mod∏gib)
好像也就只能求这么一个式子,简直太没用了。
某次课的笔记
g c d ( a , b ) = ( a , b ) gcd(a, b) = (a, b) gcd(a,b)=(a,b)
l c m ( a , b ) = [ a , b ] lcm(a, b) = [a, b] lcm(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(modm),n∣m,∴a≡b(modn)
除法 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)) ac≡bc(modc),a≡b(modc/gcd(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≡a1(modm1)x≡a2(modm2)…x≡an(modmn)
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=∏miMi=M/miti≡Mi−1(modmi)
$$
拓展中国剩余定理
费马小定理
欧拉函数 ϕ ( n ) = n ∗ ∏ ( p i − 1 ) / p i \phi(n)=n*\prod(p_i-1)/p_i ϕ(n)=n∗∏(pi−1)/pi
积性函数 ϕ ( n m ) = ϕ ( n ) ϕ ( m ) , ( g c d ( n , m ) = 1 ) \phi(nm)=\phi(n)\phi(m),(gcd(n,m)=1) ϕ(nm)=ϕ(n)ϕ(m),(gcd(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) gcd(a,m)=1,aϕ(m)≡1(modm)
拓展欧几里得
线性方程组一般解法
{
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≡a1(modm1)x≡a2(modm2)
防爆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)) 1n+2n+⋯+nn=O(nln(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(dn)
常见数论函数