扩展欧几里得算法
算法原理
代码
#include<bits/stdc++.h> using namespace std; int n; int exgcd(int a,int b,int &x,int &y) { if(!b) { x=1,y=0; return a; } int d=exgcd(b,a%b,y,x); y-=a/b*x; return d; } int main() { int i,j; cin>>n; while(n--) { int a,b,x,y; cin>>a>>b; exgcd(a,b,x,y); cout<<x<<" "<<y<<endl; } return 0; }
线性同余方程
算法原理
代码
#include<bits/stdc++.h> using namespace std; typedef long long ll; int n; int exgcd(int a,int b,int &x,int &y) { if(!b) { x=1,y=0; return a; } int d=exgcd(b,a%b,y,x); y-=a/b*x; return d; } int main() { int i,j; cin>>n; while(n--) { int a,b,x,y,m; cin>>a>>b>>m; int d=exgcd(a,m,x,y); if(b%d) puts("impossible"); else cout<<(ll)x*(b/d)%m<<endl; } return 0; }