码迷,mamicode.com
首页 > 其他好文 > 详细

51nod 1256 扩展欧几里得

时间:2017-07-22 22:29:34      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:输出   ack   turn   return   stream   ext   color   tput   span   

给出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 扩展欧几里得

标签:输出   ack   turn   return   stream   ext   color   tput   span   

原文地址:http://www.cnblogs.com/xingkongyihao/p/7222898.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!