51Nod 1256 乘法逆元 擴充套件歐幾里得
阿新 • • 發佈:2018-12-24
基準時間限制:1 秒 空間限制:131072 KB 分值: 0 難度:基礎題
給出2個數M和N(M < N),且M與N互質,找出一個數K滿足0 < K < N且K * M % N = 1,如果有多個滿足條件的,輸出最小的。
Input
輸入2個數M, N中間用空格分隔(1 <= M < N <= 10^9)
Output
輸出一個數K,滿足0 < K < N且K * M % N = 1,如果有多個滿足條件的,輸出最小的。
Input示例
2 3
Output示例
2
K * M % N = 1可化為
K*M%N=1%N;
K*M+NY=1;
然後下面就是運用擴充套件歐幾里得演算法了....
程式碼如下:
#include <cstdio> #include <cstring> #include <algorithm> #include <iostream> using namespace std; typedef long long ll; ll m,n; ll Extend (ll a,ll b,ll& x,ll& y) { if(b==0) { x=1; y=0; return a; } else { ll ans=Extend(b,a%b,x,y); ll temp=x; x=y; y=temp-a/b*y; return ans; } } int main() { scanf("%lld%lld",&m,&n); ll x,y; ll gcd=Extend(m,n,x,y); x=(x%n+n)%n; printf("%lld\n",x); return 0; }