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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章