1256 乘法逆元
给出2个数M和N(M < N),且M与N互质,找出一个数K满足0 < K < N且K * M % N = 1,如果有多个满足条件的,输出最小的。
若K*M%N==1则称k为M%N的乘法逆元,逆元一般还用在除法取模上。其解法有扩展欧几里得定理和费马小定理,本题用的是扩展欧几里得定理
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
const int mod=1000000007;
long long X,y;
long long gcd(long long a,long long b)
{
int t,d;
if(b==0)
{
X=1;
y=0;
return a;
}
d=gcd(b,a%b);
t=X;
X=y;
y=t-(a/b)*y;
return d;
}
int main()
{
int N,M;
while(scanf("%d %d",&M,&N)!=EOF)
{
gcd(M,N);
if(X<0)
X+=N;
printf("%I64d\n",X);
}
return 0;
}