扩展欧几里德求逆元模板:
using namespace std;
//举例 3x+4y=1 ax+by=1
//得到一组解x0=-1,y0=1 通解为x=-1+4k,y=1-3k
inline __int extend_(__int a,__int b,__int &x,__int &y)//ax+by=1返回a,b的,同时求的一组满足题目的最小正整数解
{
__int ans,t;
if(b==0)
{
x=1;
y=0;
return a;
}
ans=extend_(b,a%b,x,y);
t=x;
x=y;
y=t-(a/b)*y;
return ans;
}
//(a/b)%mod=c 逆元为p,(p*b)%mod=1
//(a/b)*(p*b)%mod=c*1%mod=c
// (p*b)%mod=1 等价于 p*b-(p*b)/mod*mod=1其中要求p,b已知 等价于 ax+by=1
//其中x=p(x就是逆元),y=p/mod,a=b,b=b*mod 那么调用extend_(b,b*mod,x,y)即可求(a/b)%mod的逆元等价于a*p%mod
int main()
{
__int a,b,x,y,c,,mod,p;//ax+by=c
while(cin>>a>>b>>c)
{
=extend_(a,b,x,y);
cout<<x<<" "<<y<<endl;
if(c%)
{
cout<<"无解!"<<endl;
continue;
}
cout<<"x="<<x*c/<<" y="<<y*c/<<endl;
}
return 0;
}