51nod 1256 扩展欧几里得

Posted starry

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了51nod 1256 扩展欧几里得相关的知识,希望对你有一定的参考价值。

给出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*Y+1,也可以相当于K*M+N*Y=1,所以K = (x+n)%n;

 1 #include <iostream>
 2 #include <stdio.h>
 3 using namespace std;
 4 
 5 int extgcd(int a, int b, int &x, int &y){
 6     int d = a;
 7     if(b != 0){
 8         d = extgcd(b,a%b,y,x);
 9         y -= (a/b)*x;
10     }else{
11         x = 1; y = 0;
12     }
13     return d;
14 }
15 int mod(int a, int m){
16     int x, y;
17     extgcd(a,m,x,y);
18     // cout << x << ‘ ‘ << y << endl;
19     return (m+x)%m;
20 }
21 int main(){
22     int n, m;
23     scanf("%d%d",&m,&n);
24     printf("%d\n",mod(m,n));
25     return 0;
26 }

 

以上是关于51nod 1256 扩展欧几里得的主要内容,如果未能解决你的问题,请参考以下文章

51Nod 1256 乘法逆元 扩展欧几里得

51nod 1256 乘法逆元 拓展欧几里得求逆元

51nod 1352 集合计数(扩展欧几里得)

51nod 1352 集合计数 扩展欧几里得

51Nod 1352 集合计数 扩展欧几里得

51 Nod 1352 集合计数(中国剩余定理+扩展欧几里得)