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


posted @ 2016-03-05 18:36  __NaCl  阅读(134)  评论(0编辑  收藏  举报