a,b,m是整数且m>0,gcd(a,m)=d,如果d|b,则方程恰有d个模m不同余的解,否则方程无解。
a=d*a0 m=d*m0
a0*x+m0*y=b/d
可以转化为扩展欧几里得
typedef long long ll;
void exgcd(ll a,ll b,ll &d,ll &x,ll &y){
if(b==0){
x=1;
y=0;
d=a;
return ;
}
else{
exgcd(d,a%b,d,x,y);
ll temp=x;
x=y;
y=temp-(a/b)*y;
}
}
int f(int a,int b,int m){
exgcd(a,m,d,x,y);
if(b%d)return -1;
x=x*(b/d)%m;
for(i=1;i<=d;i++)ans[i]=(x+(i-1)*m/d)%m;
}