gcd欧几里得,线性模方程

2019-04-14 14:41发布

int gcd(int a,int b){ return b?gcd(b,a%b):a; }void exgcd(int a,int b,int &d,int &x,int &y){ if(!b){x=1;y=0;d=a;} else{exgcd(b,a%b,d,y,x);y-=a/b*x;} }//r是(a/d)在模(n/d)意义下的逆 int linear_modular(int a,int b,int n){ int r,s,d; exgcd(a,n,d,r,s); if(b%d)return -1; else return (r*(b/d)+n*abs(r))%(n/d); }