本文主要是介绍51Nod_1256 乘法逆元,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
51Nod_1256 乘法逆元
http://www.51nod.com/Challenge/Problem.html#!#problemId=1256
题目
给出2个数M和N(M < N),且M与N互质,找出一个数K满足0 < K < N且K * M % N = 1,如果有多个满足条件的,输出最小的。
输入
输入2个数M, N中间用空格分隔(1 <= M < N <= 10^9)
输出
输出一个数K,满足0 < K < N且K * M % N = 1,如果有多个满足条件的,输出最小的。
样例输入
2 3
样例输出
2
分析
乘法逆元模板题,此问题用扩展欧几里得解决
C++程序
#include<iostream>using namespace std;//扩展欧几里得
int e_gcd(int a,int b,int &x,int &y)
{if(b==0){x=1;y=0;return a;}int gcd=e_gcd(b,a%b,x,y);int temp=x;x=y;y=temp-a/b*y;return gcd;
}
//计算a对m的逆元 ,不存在返回-1
int inv(int a,int m)
{int x,y,gcd;gcd=e_gcd(a,m,x,y);if(gcd!=1) return -1;if(m<0) m=-m;x=x%m;if(x<0) x=x+m;return x;
}int main()
{int m,n;cin>>m>>n;cout<<inv(m,n)<<endl;return 0;
}
这篇关于51Nod_1256 乘法逆元的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!