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