数学基础III 扩展中国剩余定理 扩展Lucas定理 扩展BSGS 原根 指标

扩展中国剩余定理

一般的中国剩余定理只能解决模数互质的情况。扩展中国剩余定理可以解决模数不互质的情况。
考虑依次将 n n n个方程合并起来。设前面合并起来的方程是 x = m u k u + a u x=m_uk_u+a_u x=muku+au,当前枚举到的方程是 x = m v k v + a v x=m_vk_v+a_v x=mvkv+av,则联立得到( x x x的符号可忽略) m u k u + m v k v = a u − a v m_uk_u+m_vk_v=a_u-a_v muku+mvkv=auav
使用扩展欧几里得,求出最小正整数解 k u ′ k_u' ku k v ′ k_v' kv。那么我们合并得到的方程就是 x = l c m ( m u , m v ) k + m u k u ′ + a u x=\rm lcm(m_u,m_v)k+m_uk_u'+a_u x=lcm(mu,mv)k+muku+au
这样合并到最后就能得到答案。

long long cm = m[0], ca =a[0];
for(int i = 1; i < n; i++) {
	long long d, x, y, dela = (a[i]-ca%m[i]+m[i])%m[i];
	exgcd(cm, m[i], d, x, y);
	if(dela % d) {
		printf("You've got no electricity, I come to your house!\n");
		return 0;
	}
	long long sol = qmul(x, dela/d, m[i]/d);
	ca += sol * cm;
	cm *= m[i] / d;
	ca = (ca%cm+cm)%cm;
}
return ca;
//2019.3.14 // mod = 苯酚醛

20180929UPD:由 m 1 k 1 = a 2 − a 1 + m 2 k 2 m_1k_1=a_2-a_1+m_2k_2 m1k1=a2a1+m2k2
两边同时除以 gcd ⁡ ( m 1 , m 2 ) \gcd(m_1,m_2) gcd(m1,m2),令其为 G G G(注意判断是否 a 2 − a 1 ∣ G a_2-a_1|G a2a1G,不成立则方程无解)。令 A = a 2 − a 1 G A=\frac{a_2-a_1}{G} A=Ga2a1
m 1 G k 1 = A + m 2 G k 2 \frac{m_1}{G}k_1=A+\frac{m_2}{G}k_2 Gm1k1=A+Gm2k2
m 1 G k 1 = A ( m o d m 2 G ) \frac{m_1}{G}k_1=A \pmod{\frac{m_2}{G}} Gm1k1=A(modGm2)
k 1 = A ⋅ i n v ( m 1 G , m 2 G ) ( m o d m 2 G ) k_1=A \cdot inv(\frac{m_1}{G},\frac{m_2}{G})\pmod{\frac{m_2}{G}} k1=Ainv(Gm1,Gm2)(modGm2)
k 1 = A ⋅ i n v ( m 1 G , m 2 G ) + m 2 G ⋅ k ′ k_1=A \cdot inv(\frac{m_1}{G},\frac{m_2}{G})+\frac{m_2}{G}\cdot k&#x27; k1=Ainv(Gm1,Gm2)+Gm2k
最后将 k 1 k_1 k1代为 x − a 1 m 1 \frac{x-a_1}{m_1} m1xa1
x = A ⋅ i n v ( m 1 G , m 2 G ) ⋅ m 1 + a 1 ( m o d m 1 m 2 G ) x=A\cdot inv(\frac{m_1}{G},\frac{m_2}{G})\cdot m_1+a_1 \pmod{\frac{m_1m_2}{G}} x=Ainv(Gm1,Gm2)m1+a1(modGm1m2)
这就是合并后的方程。

扩展Lucas定理

Lucas定理只能解决模数是质数的情况。事实上很多扩展定理都是将质数推广到非质数而来的。扩展Lucas定理可以解决模数为任意正整数的问题,复杂度为 O ( p t ) O(p^t) O(pt),其中 p t p^t pt是模数分解为的质因数的幂。

首先学习求 n ! m o d &ThinSpace;&ThinSpace; p t n!\mod p^t n!modpt。将乘数中将 p p p的倍数提出来,除以倍数后依然是阶乘形式,因此这一部分可以递归计算。而其它部分按值域每 ( p − 1 ) p t − 1 (p-1)p^{t-1} (p1)pt1分为一组,它们对 m o d &ThinSpace;&ThinSpace; p t \mod p^t modpt是同余的,因此计算一组即可,复杂度 O ( p t ) O(p^t) O(pt)
举例说明,模数为 3 2 时 , 3^2时, 32 25 ! ≡ 3 8 × 8 ! × ( 1 × 2 × 4 × 5 × 7 × 8 ) 3 × 25 25!\equiv3^8\times 8!\times (1\times2\times4\times5\times7\times8)^3\times 25 25!38×8!×(1×2×4×5×7×8)3×25
然后就可以计算 C n m m o d &ThinSpace;&ThinSpace; p t C_n^m\mod p^t Cnmmodpt了。
回到原问题,我们将模数质因数分解为 ∏ p i t i \prod p_i^{t_i} piti,设答案为 a n s ans ans,则我们得到若干个同余方程 a n s ≡ C n m ( m o d &ThinSpace;&ThinSpace; p i t i ) ans\equiv C_n^m(\mod p_i^{t_i}) ansCnm(modpiti)。使用上述方法算出系数,然后中国剩余定理合并即可。

扩展BSGS

a x ≡ b ( m o d &ThinSpace;&ThinSpace; m ) a^x\equiv b(\mod m) axb(modm) m m m为任意正整数。
因为要求 a − 1 m o d &ThinSpace;&ThinSpace; m a^{-1}\mod m a1modm,所以在 gcd ⁡ ( a , m ) = 1 \gcd(a,m)=1 gcd(a,m)=1时才能用BSGS解。考虑转化成这个形式。
原方程化为 a x − 1 a gcd ⁡ ( a , m ) ≡ b gcd ⁡ ( a , m ) ( m o d &ThinSpace;&ThinSpace; m gcd ⁡ ( a , m ) ) a^{x-1}\frac{a}{\gcd(a,m)}\equiv \frac{b}{\gcd(a,m)}(\mod \frac{m}{\gcd(a,m)}) ax1gcd(a,m)agcd(a,m)b(modgcd(a,m)m)。将 a gcd ⁡ ( a , m ) \frac{a}{\gcd(a,m)} gcd(a,m)a等看作系数,递归计算直到 gcd ⁡ ( a , m ) = 1 \gcd(a,m)=1 gcd(a,m)=1。然后反带回去即可。答案 = x + 递 归 次 数 =x+递归次数 =x+

upd on 2019.1.13
d = gcd ⁡ ( a , p ) d=\gcd(a,p) d=gcd(a,p),则当 d ∣ p d|p dp时有解。每次 p p p会除以一个数,因此最多递归 O ( log ⁡ p ) O(\log p) O(logp)次。每次 a a a的次数会减少 1 1 1,因此最后求出的是 x − 递 归 次 数 x-递归次数 x。注意答案有可能小于递归次数,因此还要枚举小于等于递归次数的答案判断是否合法。

原根 指标

在模 p p p意义下的原根 g g g有以下性质:
原根个数 = φ ( φ ( p ) ) =\varphi(\varphi(p)) =φ(φ(p))
g i ≡ g j ( m o d &ThinSpace;&ThinSpace; p ) ⇔ i ≡ j ( m o d &ThinSpace;&ThinSpace; φ ( p ) ) g^i\equiv g^j(\mod p)\Leftrightarrow i\equiv j(\mod\varphi(p)) gigj(modp)ij(modφ(p))
指标的定义: g i n d ( x ) ≡ x g^{ind(x)}\equiv x gind(x)x
由此, x k ( m o d &ThinSpace;&ThinSpace; p ) x^k(\mod p) xk(modp)可转化为 i n d ( x ) ⋅ k ( m o d &ThinSpace;&ThinSpace; φ ( p ) ) ind(x)\cdot k(\mod\varphi(p)) ind(x)k(modφ(p))
求指标用BSGS,将指标还原用快速幂。

原根的求法

设模数为 p p p,将 φ ( p ) \varphi(p) φ(p)分解为 ∏ P i t i \prod P_i^{t_i} Piti。从 2 2 2开始枚举 g g g,如果有 g φ ( p ) P i ≡ 1 ( m o d &ThinSpace;&ThinSpace; p ) g^{\frac{\varphi(p)}{P_i}}\equiv1(\mod p) gPiφ(p)1(modp)满足则不是原根,否则找到一个原根。
如果广义黎曼猜想成立, g g g取到 log ⁡ log ⁡ log ⁡ log ⁡ log ⁡ log ⁡ n \log\log\log\log\log\log n loglogloglogloglogn规模时即可找到一个原根。由一个数的质因数个数是 log ⁡ n log ⁡ log ⁡ n \frac{\log n}{\log \log n} loglognlogn,总复杂度为 log ⁡ n × log ⁡ log ⁡ log ⁡ log ⁡ log ⁡ log ⁡ n log ⁡ log ⁡ n \frac{\log n\times\log\log\log\log\log\log n}{\log \log n} loglognlogn×loglogloglogloglogn,该算法的瓶颈在于分解质因数。

二次剩余

本季度内
from **999
已隐藏

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值