1.解同余方程: 同余方程可以转化为不定方程,其实就是,这样的问题一般用拓展欧几里德算法求解. LL exgcd(LL a,LL b,LL &x,LL &y){ if(!b){ x=;y=; return a; } LL gcd=exgcd(b,a%b,x,y); LL t=x; x=y; y=t-a/b*x; return gcd; } 2.解同余方程组(任意两个模意义互质)用CRT. LL CRT(){ LL ans=,M=,x,y; ;i<=n;i++) M*=m[i]; ;i…
\(crt,Chinese\ Remainder\ Theorem\) 概述 前置技能:同余基础性质,\(exgcd\). \(crt\),中国剩余定理.用于解决模数互质的线性同余方程组.大概长这样: \[ \begin{equation} \left\{ \begin{array}{lr} x\equiv a_1(mod\ m_1),\\ x\equiv a_2(mod\ m_2),\\ x\equiv a_3(mod\ m_3),\\ ......\\ x\equiv a_n(mod\ m_…
[笔记] CRT & exCRT 构造法 求多组\(x \equiv r_i (\bmod d_i)\)的解,\(d_i\)互质 余数\((r_i = remainder)\),除数\((d_i=divisor)\) 我们想啊,如果我们能找到一个数 \(k1\equiv1(mod\text{ }3)\)是 \(5\) 和 \(7\) 的倍数 一个数 $k2\equiv1(mod\text{ }5) $是\(3\)和\(7\)的倍数 一个数 $k3\equiv1(mod\text{ }7) $是\…
思路: 先copy一下百度百科 作为预备知识吧多重全排列定义:求r1个1,r2个2,…,rt个t的排列数,设r1+r2+…+rt=n,设此排列数称为多重全排列,表示为$P(n;r1,r2,…,rt)$$P(n;r1,r2,…,rt)=\frac{n!}{(r1!r2!...rt!)}$ 题目是让求s的排名mod m我们就可以从前往后枚举前$(i-1)$位跟给出的排列一样 第i位填小于s[i]的数后面i到n位可以随便填的方案数(有点像数位DP最后统计的那种感觉.)设calc[x]是串s中i到n位…
前言: 中国剩余定理又名孙子定理.因孙子二字歧义,常以段子形式广泛流传. 中国剩余定理并不是很好理解,我也理解了很多次. CRT 中国剩余定理 中国剩余定理,就是一个解同余方程组的算法. 求满足n个条件的最小的x. 看起来很麻烦. 先找一个特殊情况:$m_1,m_2,...m_n$两两互质. 这个时候,构造$M=m_1*m_2*...m_n$; 令$M_i=M/m_i$; 所以,构造$n$个数,其中第$i$个数是除$i$之外的其他所有数的倍数,并且第$i$个数$mod m_i =1$ 即:$M_…
CRT从各种方面上都吊打exCRT啊...... 短,好理解... 考虑构造bi使得bi % pi = ai,bi % pj = 0.然后全加起来就行了. 显然bi的构造就是ai * (P/pi) * inv(P/pi). LL a = , p = MO - ; ; i <= ; i++) { a = (a + ans[i] * (p / mod[i]) % p * qpow(p / mod[i], mod[i] - , mod[i]) % p) % p; } exCRT: 是这样的,重新手推了…
中国剩余定理 别人的blog 假设现在有关于x的同余方程组(p1,p2均为质数) \(x=a_1\pmod {p_1}\) \(x=a_2\pmod {p_2}\) 可以转化成如下形式 \(x=a_1+k_1p_1\) \(x=a_2+k_2p_2\) 联立就有\(a_1+k_1p_1=a_2+k_2p_2\) 显然可以扩欧求一组特解,设为\(k_1',k_2'\) 那么全部的解可以表示成 \(k_1=k_1'+p_2t\) \(k_2=k_2'+p_1t\) 其中t为整数 回带就有\(x=a_…
从最基础的开始. 1.gcd 这个不用说了吧--\(gcd(a,b) = gcd(b,a\%b)\),这个很显然. 2.exgcd 这玩意可以用来求形如\(ax+by = gcd(a,b)\)的不定方程的一组特解. 首先来证明一下为什么一定是有解的. 因为我们是像上面的gcd一样递归解决问题的,所以当\(b = 0\)时,我们返回a,此时方程必然有一个特解\(x = 1,y = 0\)成立. 我们假设现在已经求出了一组解\(x_1,y_1\),我们要求下一组解\(x_2,y_2\) 有\(ax_…
这玩意解决的是把同余方程组合并的问题. CRT的核心思想和拉格朗日插值差不多,就是构造一组\(R_i\)使得$\forall i,j(i \neq j) $ \[R_im_i = 1, R_im_j = 0 \] 有了思路后这玩意随便构造一下就出来了,式子里面出现了一些奇怪的逆元,所以要求模数互质 现在考虑扩展CRT,模数不互质了 本质思路是合并两个同余方程组 发现同余条件等价于\(x=k_1m_1+a_1=k_2m_2+a_2\) 怎么求出其中的一个\(k\)呢?其实也就是\(k_1m_1-k…
非扩展 用于求解线性同余方程组 ,其中模数两两互质 . 先来看一看两个显然的定理: 1.若 x \(\equiv\) 0 (mod p) 且 y \(\equiv\) 0 (mod p) ,则有 x+y \(\equiv\) 0 (mod p) 2.若 x \(\equiv\) b (mod p) 且 y \(\equiv\) 0 (mod p), 则有 x+y \(\equiv\) b (mod p) (0$\leq $b<p) 则整个方程组可以写为 b1 \(\begin{bmatrix}1…