(拓展歐幾里得)51NOD 1256 乘法逆元
阿新 • • 發佈:2018-11-27
給出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 }