给出2个数M和N(M < N),且M与N互质,找出一个数K满足0 < K < N且K * M % N = 1,如果有多个满足条件的,输出最小的。
Input
输入2个数M, N中间用空格分隔(1 <= M < N <= 10^9)
Output
输出一个数K,满足0 < K < N且K * M % N = 1,如果有多个满足条件的,输出最小的。
Input示例
2 3
Output示例
2
k*m%n=1;化简 k*m=n*y+1
k*m+n*y=1; 拓展欧几里得 x*a+y*b=1;
#include<cstdio>
void exgcd(int a,int b,int &r,int &x,int &y)
{
if(b==0)
{
r=a;
y=0;
x=1;
}
else
{
exgcd(b,a%b,r,y,x);
y-=x*(a/b);
}
}
int main()
{
int a,b,x,y,r;
scanf("%d%d",&a,&b);
exgcd(a,b,r,x,y);
int ans;
ans=(x%b+b)%b;
printf("%d\n",ans);
}