扩展欧几里得exgcd

#include<iostream>
#include<cstdio>
using namespace std;

int p,q,x,y;

int exgcd(int a,int b,int &x,int &y){//a*x+b*y=gcd(a,b)
    if(b==0){
        x=1; y=0;
        return a;
    }
//    int d=exgcd(b,a%b,x,y);
//    int t=x;
//    x=y;
//    y=t-(a/b)*y;
    //写法一 
    int d=exgcd(b,a%b,y,x);
    y=y-(a/b)*x;
    //写法二 
    return d;
}

int main(){
    cin>>p>>q;
    exgcd(p,q,x,y);
    cout<<(x+q)%q<<endl;
    return 0;
} 
原文地址:https://www.cnblogs.com/DReamLion/p/14365138.html