給出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;
}