1256 乘法逆元

来源:互联网 发布:日常英语口语视频软件 编辑:程序博客网 时间:2024/06/06 21:20

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


0 0
原创粉丝点击