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

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

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

      擴展歐幾里德算法

      基本知識

      擴展歐幾里德算法即 exgcd,一般用來求形如 \(ax+by=\gcd(a,b)\) 的二元一次不定方程的整數解。以下為了方便將用 \(d\) 代替 \(\gcd(a,b)\)

      考慮 \(\gcd(b,a\bmod b)=\gcd(a,b)\),,于是遞歸,邊界是 \(b=0\),此時方程是 \(ax=a\),顯然 \(x=1\)\(y\) 沒有限制。

      再考慮 \(bx+(a\bmod b)y=d\) 的解如何轉變成 \(ax+by=d\) 的,我們設 \(bx+(a\bmod b)y=d\) 的解 \(x=y_0,y=x_0\),于是 \((a\bmod b)x_0+by_0=d\),因此我們可以令 \(ax+by=d\) 的解 \(x=x_0\),注意到 \(a=b\times\lfloor \frac{a}{b}\rfloor+a\bmod b\),因此 \(ax+by=d\)\((a\bmod b)x_0+by_0=d\) 兩式相減得 \(b\times\lfloor \frac{a}{b}\rfloor x_0+b(y-y_0)=0\),變一下形得 \(y=y_0-\lfloor \frac{a}{b}\rfloor x_0\)

      這樣的話,代碼就不難寫了:

      ll exgcd(ll a,ll b,ll &x,ll &y){
          if(!b){
              x=1;y=0;
              return a;
          }ll d=exgcd(b,a%b,y,x);
          y-=a/b*x;
          return d;
      }
      

      P5656 【模板】二元一次不定方程 (exgcd)

      考慮 exgcd,后面將用 \(d\) 表示 \(\gcd(a,b)\)

      首先用 exgcd 求 \(ax+by=d\) 一組解 \(x_0,y_0\)。考慮根據裴蜀定理,如果 \(c\) 不是 \(d\) 的倍數,則必定無解。于是對于 \(ax+by=c\),我們得到了一組解 \(\begin{cases}x_1=x_0\times \frac{c}w0obha2h00\\y_1=y_0\times\frac{c}w0obha2h00\end{cases}\)

      接下來求通解,令 \(a(x_1+n)+b(y_1+m)=c\),拆開后得 \(ax_1+by_1+an+bm=c\),注意到 \(ax_1+by_1=c\),于是 \(an+bm=0\)。由于 \(a,n,b,m\) 都是整數,因此絕對值最小的 \(n,m\) 當然是湊 \(a,b\) 的最小公倍數(也就是 \(\frac{ab}w0obha2h00\)),也就是使得 \(an+bm=\frac{ab}w0obha2h00-\frac{ab}w0obha2h00=0\),因此 \(n=\frac{b}w0obha2h00,m=\frac{a}w0obha2h00\)。這里為了方便辨識,令 \(tx=n,ty=m\)。于是通解出來了:

      \[\begin{cases}x=x_1+k\times tx\\y=y_1-k\times ty\end{cases} \]

      其中,\(k\in \mathbb{Z}\)

      這樣,后面的就好求了。我們先求 \(x\) 的最小正整數解,此時有 \(x_{\max}+k\times tx\ge 1\),變一下形得 \(k\ge\lceil\frac{1-x_{\max}}{tx}\rceil\),同時,由于 \(x\) 達到了最小,那 \(y\) 就達到了最大,如果這時的 \(y_{\max}\) 仍不為正,那么就無正整數解,其中 \(y\) 的最小正整數解也能用同樣的方法求出。

      如果有正整數解,我們考慮這個最大的 \(y_{\max}\),設最小的為 \(y_{\min}\),則 \(y_{\min}=y_{\max}-k\times ty\ge 1\),得 \(k\le\lfloor\frac{y_{\max}-1}{ty}\rfloor\),于是我們也得到解的數量為 \(\lfloor\frac{y_{\max}-1}{ty}\rfloor+1\),同理也能求出 \(x_{\max}\)

      這樣代碼也不難寫了:

      #include<iostream>
      #include<cmath>
      #include<cstdio>
      #include<algorithm>
      #include<cstring>
      using namespace std;
      #define int long long
      typedef long long ll;
      ll exgcd(ll a,ll b,ll &x,ll &y){
          if(!b){
              x=1;y=0;
              return a;
          }ll d=exgcd(b,a%b,y,x);
          y-=a/b*x;
          return d;
      }
      signed main(){
          cin.tie(0);ios::sync_with_stdio(0);
          int T;cin>>T;
          while(T--){
              ll a,b,c;cin>>a>>b>>c;int x,y;
              ll d=exgcd(a,b,x,y);
              if(c%d){
                  cout<<"-1\n";continue;
              }
              x=x*(c/d),y=y*(c/d);
              ll tx=b/d,ty=a/d;
              ll k=ceil((1.0-x)/tx);
              x+=tx*k;y-=ty*k;
              if(y<=0){
                  cout<<x<<' '<<y+ty*(long long)ceil((1.0-y)/ty)<<'\n';
              }else{
                  cout<<(y-1)/ty+1<<' '<<x<<' '<<(y-1)%ty+1<<' '<<x+(y-1)/ty*tx<<' '<<y<<'\n';
              }
          }
          return 0;
      }
      
      posted @ 2025-10-27 17:22  PengDave  閱讀(3)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 成人午夜视频一区二区无码| 国产白嫩护士在线播放| 人人妻人人做人人爽夜欢视频| 国产成人高清亚洲综合| 午夜大片免费男女爽爽影院| 老司机精品成人无码AV| 99精品国产一区二区三| 亚洲欧美综合中文| 暖暖影院日本高清...免费| 亚洲色无码专区一区| 天天综合色一区二区三区| 五月丁香啪啪| 午夜福利院一区二区三区| 国产精品午夜福利91| 国产精品视频午夜福利| 亚洲精品国产美女久久久| 国产成人精品高清不卡在线| 少妇高潮潮喷到猛进猛出小说 | 永寿县| 人妻少妇偷人精品免费看| 漂亮人妻中文字幕丝袜| 亚洲日韩国产精品第一页一区| 极品少妇无套内射视频| 国产成人无码AV片在线观看不卡 | 国产成人精品亚洲午夜| 一本大道久久香蕉成人网| 日韩av一区二区精品不卡| 亚洲爆乳WWW无码专区| 国产午夜亚洲精品国产成人| 亚洲国产高清第一第二区| 亚洲av二区伊人久久| 精品久久久无码中文字幕| 国产成人精品av| 开心五月激情综合久久爱| 国产女人喷潮视频免费| 精品国产福利一区二区在线| 国产精品免费第一区二区| 2021最新国产精品网站| 国产高清精品一区二区三区| 四虎永久免费高清视频| 国产愉拍精品手机|