<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      CRT&EXCRT(中國剩余定理和擴展中國剩余定理)

      稍微難一點,其實也挺簡單。

      CRT:

      用途:

      給定一個同余方程組,保證所有 \(m\) 兩兩互質:

      \[\begin{cases} x\equiv a_1\pmod{m_1} \\ x\equiv a_2\pmod{m_2} \\ ... \\ x\equiv a_n\pmod{m_n}\end{cases} \]

      用于求其解。

      具體方法:

      自我感覺叫方法好一點,建議理解記憶,公式見下。
      首先我們先找一組數 \(n\) ,使得:

      \[n_i \bmod m_i = a_i \text{ 或者說 }n_i\equiv a_i\pmod{m_i} \]

      因為:如果 \(a \bmod b = t\) 那么 \((a+k\times b) \bmod b = t\) (比較顯然
      所以:
      如果 \(m_1 \mid n_2\) 那么 \((n_1 + n_2) \bmod m_1 = a_1\)
      如果 \(m_2 \mid n_1\) 那么 \((n_1 + n_2) \bmod m_2 = a_2\)
      也就是說,要想使

      \[\begin{cases} n_1 + n_2\equiv a_1\pmod{m_1} \\ n_1 + n_2\equiv a_2\pmod{m_2}\end{cases} \]

      只需要

      \[\begin{cases} m_1 \mid n_2 \\ m_2 \mid n_1 \end{cases} \]

      同理,我們設 \(sum=\sum\limits_{i=1}^nn_i,M=\prod\limits_{i=1}^nm_i\) 要想使:

      \[\begin{cases} sum\equiv a_1\pmod{m_1} \\ sum\equiv a_2\pmod{m_2} \\ ... \\ sum\equiv a_n\pmod{m_n}\end{cases} \]

      只需要

      \[\begin{cases} m_2,m_3,...,m_n \mid n_1\\ m_1,m_3,...,m_n \mid n_2\\ ... \\ m_1,m_2,...,m_{n-1} \mid n_n \end{cases} \]

      因為所有 \(m\) 兩兩互質,所以只需要

      \[M \div m_i \mid n_i \]

      接下來考慮怎么求 \(n_i\)
      我們設 \(n_i=M\div m_i \times t_i\)
      于是我們只需求一個 \(t_i\) ,使其滿足

      \[M\div m_i \times t \equiv a_i\pmod{m_i} \]

      因為 \(M\div m_i\) 是個常數,所以直接用 \(exgcd\)求解即可。
      當然也可以先用乘法逆元算 \(M\div m_i \times t \equiv 1\pmod{m_i}\) 在乘上 \(a_i\) ,本質相同。

      這樣我們就可以求出所有 \(n_i\) ,進而求出 \(x=\sum\limits_{i=1}^nn_i\),如果 \(x\) 要求最小,只需要 \(\bmod M\) 即可。

      公式:

      \(M=\prod\limits_{i=1}^nm_i,M_i=M \div m_i\)

      \[x=\sum\limits_{i=1}^n a_i \times M_i \times M_i^{-1} \bmod M \]

      這里的 \(M_i^{-1}\)\(M_i\) 對于 \(m_i\) 的逆元,不能和 \(M_i\) 合并。

      例題

      CODE(點擊查看)
      #include<bits/stdc++.h>
      using namespace std;
      #define llt long long
      int n,m[12],a[12];
      
      template<typename T>
      inline void read(T &x){
          char s=getchar();x=0;bool pd=false;
          while(s<'0'||'9'<s){if(s=='-') pd=true;s=getchar();}
          while('0'<=s&&s<='9')x=(x<<1)+(x<<3)+(s^48),s=getchar();
          if(pd) x=-x;
      }
      void exgcd(llt a,llt b,llt &x,llt &y){
      	if(b==0) x=1,y=0;
      	else exgcd(b,a%b,y,x),y-=a/b*x;
      }
      
      int main(){
      	read(n);
      	long long tm=1,ans=0;
      	for(int i=1;i<=n;i++) read(m[i]),read(a[i]),tm*=m[i];
      	for(int i=1;i<=n;i++){
      		long long lm=tm/m[i],x,y;
      		exgcd(lm,m[i],x,y);
      		x=(x%m[i]+m[i])%m[i];
      		ans=(ans+x*a[i]*lm)%tm;
      	}
      	printf("%lld",ans%tm);
      }
      

      這里推薦一篇博客,講的很細(我從那里學的,本文也有很多借鑒。

      EXCRT

      其實和 \(crt\) 沒有什么關聯,單純推式子。
      我們來看一下同余方程組

      \[\begin{cases} x\equiv a_1\pmod{m_1} \\ x\equiv a_2\pmod{m_2} \\ ... \\ x\equiv a_n\pmod{m_n}\end{cases} \]

      這里不保證 \(m\) 互質
      首先看第一二個式子:

      \[\begin{cases} x\equiv a_1\pmod{m_1} \\ x\equiv a_2\pmod{m_2}\end{cases} \]

      變形得到:

      \[\begin{cases} x = a_1 + m_1k_1 \\ x = a_2 + m_2k_2\end{cases} \]

      \[\therefore a_1+m_1k_1=a_2+m_2k_2 \]

      整理:

      \[m_1k_1-m_2k_2=a_2-a_1 \]

      運用 \(exgcd\) 解得 \(k_1\) 的一組解:

      \[k_1=r \]

      \[\therefore k_1 \text{ 的通解為 } k_1=r+\frac{m_2}{\gcd(m_1,m_2)} \times t \mid t \in Z \]

      將上式帶入 \(x = a_1 + m_1k_1\) 得:

      \[x=a_1+m_1r+\frac{m_1m_2}{\gcd(m_1,m_2)}\times t \]

      \[\because \operatorname{lcm(m_1,m_2)}=\frac{m_1m_2}{\gcd(m_1,m_2)} \]

      \[\therefore x=a_1+m_1r+\operatorname{lcm(m_1,m_2)}\times t \]

      變形得到:

      \[x\equiv a_1+m_1r\pmod{\operatorname{lcm(m_1,m_2)}} \]

      于是我們就成功將兩個同余方程化簡成了一個。
      同理化簡下去直到一個,求解即可。

      例題

      CODE(點擊查看)
      #include<bits/stdc++.h>
      using namespace std;
      #define llt long long
      __int128 n,na=0,nm=1;
      
      template<typename T>
      inline void read(T &x){
          char s=getchar();x=0;bool pd=false;
          while(s<'0'||'9'<s){if(s=='-') pd=true;s=getchar();}
          while('0'<=s&&s<='9')x=(x<<1)+(x<<3)+(s^48),s=getchar();
          if(pd) x=-x;
      }
      llt gcd(llt a,llt b){return (b==0)?a:gcd(b,a%b);}
      llt lcm(llt a,llt b){return a/gcd(a,b)*b;}
      void exgcd(__int128 a,__int128 b,__int128 &x,__int128 &y){
      	if(b==0) x=1,y=0;
      	else exgcd(b,a%b,y,x),y-=a/b*x;
      }
      inline void hebing(llt a,llt m){
      	llt sa=a-na;
      	__int128 x,y;
      	llt gd=gcd(nm,m);
      	exgcd(nm,m,x,y);
      	llt lm=m/gd;x*=(sa/gd),y*=(sa/gd);
      	x=(x%lm+lm)%lm;
      	na=na+nm*x;
      	nm=lcm(nm,m);
      }
      
      int main(){
      #ifndef ONLINE_JUDGE
          freopen("in.in","r",stdin);
          freopen("out.out","w",stdout);
      #endif
      	read(n);
      	for(llt a,m,i=1;i<=n;i++) read(m),read(a),hebing(a,m);
      	__int128 x,y;
      	exgcd(1,nm,x,y);
      	x=(x*na%nm+nm)%nm;
      	long long ans=x; 
      	printf("%lld",ans);
      }
      

      參考博客:http://www.rzrgm.cn/sparkyen/p/11432052.html

      posted @ 2023-01-29 19:26  xrlong  閱讀(95)  評論(1)    收藏  舉報

      Loading

      主站蜘蛛池模板: 天堂网www在线资源网| 国内精品视频一区二区三区| 久久夜色撩人精品国产小说| 久久国产乱子精品免费女| 成av人电影在线观看| 40岁大乳的熟妇在线观看| 大胸少妇午夜三级| 网友偷拍视频一区二区三区| 国产精品国产自产拍高清| 亚洲狠狠婷婷综合久久久| 男人狂桶女人出白浆免费视频| 午夜福利影院不卡影院| 国产精品国语对白露脸在线播放| 国产妇女馒头高清泬20p多| 国内精品卡一卡二卡三| 国99久9在线 | 免费| 久久久久青草线蕉亚洲| 人妻在线无码一区二区三区| 国产精品黄色一区二区三区| 久久久久久免费一区二区三区| 国产成人高清精品亚洲| 久久人搡人人玩人妻精品| 国产精品中文字幕综合| 黑人巨茎大战欧美白妇| 天天躁日日躁狠狠躁一区| 欧美日韩精品一区二区三区高清视频 | av大片在线无码免费| 少妇熟女天堂网av| 噜噜噜噜私人影院| 波多野结衣美乳人妻hd电影欧美 | 国产一区二区三区的视频| 国精产品自偷自偷ym使用方法| 99精品热在线在线观看视| 天堂av网一区二区三区| 久久精品国产久精国产69| 日韩精品无码一区二区视频| 日本大片在线看黄a∨免费| 老司机久久99久久精品播放免费 | 性色av一区二区三区精品| 免费无码肉片在线观看| 77777五月色婷婷丁香视频|