(拓展欧几里得)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 }

 

posted @ 2018-11-27 20:41  Ekalos  阅读(204)  评论(0编辑  收藏  举报