學習筆記 中國剩餘定理(CRT)

2021-08-13 18:49:42 字數 3148 閱讀 3403

crt在演算法競賽中算是乙個比較重要的模組,他的基本形式如下:

給出n個式子: x≡

a1mo

dp1 x≡a

1mod

p1

x≡a2mod

p2x ≡a

2mod

p2

x≡a3mod

p3x ≡a

3mod

p3

……

x≡an mo

d pn

' role="presentation">x≡a

nmod

pnx≡

anmo

dpn求x的最小正整數解。(pi互質)

那麼如何求解x呢?

我們先考慮求解x的乙個可行解x0

x

0因為同餘的可加性,我們可以把x0

x

0拆成x

0=x1

+x2+

x3+…

+xn x0=

x1+x

2+x3

+…+x

n,每個xi x

i對應的式子為: xi

≡aim

odpi

x i≡

aimo

dp

i對於不等於i的值j xi

≡0mo

dpj xi≡

0mod

pj

再由於同餘的可乘性,我們可以把x拆成x=

a1x1

+a2x

2+…+

anxn

x =a

1x1+

a2x2

+…+a

nx

n,把式子改為: xi

≡1mo

dpi xi≡

1mod

pi

然後我們觀察每個xi

x

i:對於每個xi

x

i和不等於i的所有j,由於 xi

≡0mo

dpj xi≡

0mod

pj

設所有p的乘積為p,那麼xi

x

i一定是ppi

p pi

的倍數,那麼我們可以把xi

x

i改為 g(p

pi)≡

1mod

pig (p

pi)≡

1mod

pi

,通過這個式子可以看出g其實是pp

i pp

i在模p

i pi

意義下的逆元,xi

x

i就可以求出來,x0

x

0也就求出來了,x0

x

0的公式為: x0

=a1∗

p1∗g

1+a2

∗p2∗

g2+⋯

+an∗

pn∗g

n x0=

a1∗p

1∗g1

+a2∗

p2∗g

2+⋯+

an∗p

n∗gn

其中pi

p i為p

pip pi

,gi gi為p

i pi

在模pi p

i意義下的逆元

x的所有解為x=

x0+t

p(t∈

z)x =x

0+tp

(t∈z

)需要注意的是這種方法只能用於p均為質數的情況下,如果p不是質數的話需要用其他方法,這不是crt的內容,這裡就不講了,有興趣的朋友可以去看看我前面寫的一篇基礎數論入門,那裡面有所提及。

來道題練練手?

bzoj 1951-古代豬文

題目大意:

給出g,n,求g∑

d|nc

dng ∑d

|ncn

d%999911659

solution:

解決這個問題我們需要求出∑d

|ncd

n ∑d|

ncnd

,那麼不妨設x=

∑d|n

cdn x=∑

d|nc

nd

通過尤拉定理我們知道gp

−1≡1

modp

g p−

1≡1m

od

p所以說gx

≡gx%

(p−1

)mod

p gx≡

gx%(

p−1)

modp

我們只需要求出x%

(p−1

) x%(

p−1)

即可,由於p-1不是乙個質數,但是它可以分解成多個質數

(999911658=2

∗3∗4679

∗35617

999911658=2

∗3

∗4679

∗35617

) 那麼這道題就可以用crt了。

**:

//999911658=2*3*4679*35617

#include

#include

#include

using namespace std;

int n,g;

int md[4]=;

int tot=999911658;

int ni[4][40000];

int mi[4][40000];

int nn=0;

int f[4];

int fast_pow(int x,int a,int

mod)

return ans;

}int c(int n,int m,int

mod)

int main()

for (int j=0;j<4;j++)

ni[j][0]=1;

}//coutfor (int i=1;i<=qn;i++)}}

int ans=0;

for (int j=0;j<4;j++)

printf("%d",fast_pow(g,ans,tot+1));

}

CRT 中國剩餘定理 膜法

容易發現是楊輝三角形,第i個數的貢獻為c n 1,i 1 但是由於mod數不是質數,所以考慮用crt來做。先拆mod數,然後在求組合數的過程中將每個數拆成a pi ci的形式,非常感謝dmsdalao對我中國剩餘定理的指導。關於crt詳見 include include include define...

中國剩餘定理(筆記)

什麼是中國剩餘定理呢?先看一 間的傳說故事 韓信點兵 楚漢相爭,一次戰役中,漢軍原有1500人死傷四五百人。他命令士兵3人一排,結果多出2名 命令5人一排,多出3名 命令7人一排,多出2名。韓信便馬上說出我軍有1073名勇士。對於這個問題,可將其描述為 乙個數學問題,就是 乙個數除以3餘2,除以5餘...

中國剩餘定理學習筆記

上次jt暑假講的時候我數學太弱並沒有聽懂qwq。假設有方程組 mi 兩兩互質 x ai m odmi 令 m i 1nmi wi mmi 易知有 gc d wi mi 1下一步求出pi 使得 wi pi 1 mo dmi 這個時候x的乙個解可以表示為 x i 1 nwi pi a i 為什麼x可行呢...