gcd:辗转相除
参考核心代码:
int gcd(int a,int b)
{
if(!b) return a;
return gcd(b,a%b);
}
int exgcd(int a,int b,int &x,int &y)
{
if(!b)
{
x=1;
y=0;
return a;
}
int gcd=exgcd(b,a%b,x,y);
int tmp=x;
x=y;
y=tmp-(a/b)*y;
return gcd;
}
模 ay===1(mod m)即 ay=1+mk;
使其有解 代码如下:
int mod_inverse(int a,int m)
{
int x,y;
exgcd(a,m,x,y);
return (m+x%m)%m;
//由于可能x为负数,所以对m取模再+m再取模使x为正
}