1. 程式人生 > >(拓展歐幾里得)51NOD 1256 乘法逆元

(拓展歐幾里得)51NOD 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
解:拓展歐幾里得解方程,求逆元。
 1 #include <stdio.h>
 2 
 3 void ex_gcd(int a,int b,int *x,int *y)
 4 {
 5     if (b == 0) 
 6     {
7 *x = 1; 8 *y = 0; 9 return; 10 } 11 ex_gcd(b, a%b, y, x); 12 *y = *y - (a / b)**x; 13 return; 14 } 15 16 int main() 17 { 18 int m, n; 19 while (scanf_s("%d%d", &m, &n) != EOF) 20 { 21 int x, y; 22 ex_gcd(m, n, &x, &y);
23 printf("%d\n", x > 0 ? x : x + n); 24 } 25 return 0; 26 }