中國剩餘定理 學習筆記

2022-09-06 07:39:11 字數 2440 閱讀 6547

目錄中國剩餘定理 (chinese remainder theorem) 簡稱crt。

crt可以求解乙個這樣的方程組的最小解

\[\left\

x \equiv b_1 \pmod \\

x \equiv b_2 \pmod \\

x \equiv b_3 \pmod \\

\vdots \\

x \equiv b_k \pmod \\

\end

\right.

\]這裡保證陣列 \(a\) 兩兩互質。

crt的原理就是得到 \(c_i\) 使 \(c_i \equiv 1 \pmod \) 並且 \(c_i \equiv 0 \pmod ,i\not= j\)

顯然答案就是 \(\sum^k_ b_ic_i\)

演算法流程如下:

計算 \(a=\prod a_i\)

對於第 \(i\) 個方程:

a. 計算 \(m_i=\frac\)

b. 計算 \(m_i\) 在模 \(a_i\) 的逆元 \(m_i^\)

c. 計算 \(c_i=m_i\times m_i^\)

方程的解為 \(x \equiv \sum^k_b_ic_i \pmod a\)

證明略 (顯然啊)

**(洛谷p1495):

#include#define maxn 100039

using namespace std;

//#define debug

typedef long long ll;

typedef long long type;

inline type read()

if(flag) return -sum;

return sum;

}ll n,a[maxn],b[maxn];

ll sn,m,c,ans;

ll gcd(ll a,ll b)

inline ll lcm(ll a,ll b)

void exgcd(ll a,ll b,ll &x,ll &y)

exgcd(b,a%b,x,y);

ll t=x;

x=y; y=t-a/b*y;

return;

}ll js(ll a1,ll b1,ll a2,ll b2)//x=b_i(mod a_i)

ll excrt()

return tb;

}int main()

如果陣列 \(a\) 不是兩兩互質呢?

我們嘗試修復一下crt的方法讓它變成excrt,但是我們發現,crt的核心都說過了,它是求出 \(c_i\) 使 \(c_i \equiv 1 \pmod \) 並且 \(c_i \equiv 0 \pmod ,i\not= j\) ,但是我們發現,我們有時不能找到這樣的 \(c_i\) ,所以crt原來的思路是不能實現的。

看來只能用另外一種方法了。

考慮兩個方程的情況。

\[\left\

x \equiv b_1 \pmod \\

x \equiv b_2 \pmod \\

\end

\right.

\]令 \(x=a_1q+b_1=a2_p+b_2\)

移項,得到 \(a_1q+a_2(-p)=b_2-b_1\)

顯然只要exgcd解出 \(p,q\) 的一組解就可以解決問題了,然後顯然合併後的方程是:

\[x \equiv a_1q+b_1 \pmod \left(a_1,a_2\right)}

\]然後就可以過 洛谷p4777了,當然要注意精度問題,加上防爆乘,不然會炸精度。。。

#include#define maxn 100039

using namespace std;

//#define debug

typedef long long ll;

typedef long long type;

inline type read()

if(flag) return -sum;

return sum;

}ll mol(ll a,ll b,ll p)

if(flag) return (-ans%p+p)%p;

return ans%p;

}ll gcd(ll a,ll b)

inline ll lcm(ll a,ll b)

void exgcd(ll a,ll b,ll &x,ll &y)

exgcd(b,a%b,x,y);

ll t=x;

x=y; y=t-(a/b)*y;

return;

}int n;

ll a[maxn],b[maxn];

ll excrt()

return ans%m;

}//x=b(mod a)

int main()

中國剩餘定理學習筆記

上次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可行呢...

中國剩餘定理學習筆記

先看一道poj上的題目 poj1006 biorhythms 人自出生起就有體力,情感和智力三個生理週期,分別為23,28和33天。乙個週期內有一天為峰值,在這一天,人在對應的方面 體力,情感或智力 表現最好。通常這三個週期的峰值不會是同一天。現在給出三個日期,分別對應於體力,情感,智力出現峰值的日...

中國剩餘定理學習筆記

先看一道poj上的題目 poj1006 biorhythms 人自出生起就有體力,情感和智力三個生理週期,分別為23,28和33天。乙個週期內有一天為峰值,在這一天,人在對應的方面 體力,情感或智力 表現最好。通常這三個週期的峰值不會是同一天。現在給出三個日期,分別對應於體力,情感,智力出現峰值的日...