首页 > 其他 > 详细

3314 扩展gcd

时间:2015-08-31 10:07:50      阅读:276      评论:0      收藏:0      [点我收藏+]

l

Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^

题目描述

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

提示

 扩展欧几里德算法是用来在已知a, b求解一组x,y使得a*x+b*y=Gcd(a,b)
(解一定存在,根据数论中的相关定理)。扩展欧几里德常用在求解模线性方程及方程组中

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<map>
#define INF 0x3f3f3f3f
#define LL long long
using namespace std;

int exgcd(int a,int b,int &x,int &y)
{
	if(b==0)
	{
		x=1;y=0;
		return a;
	}
	else
	{
	   int r=exgcd(b,a%b,x,y);
	   int t=x;
	   x=y;
	   y=t-(a/b)*y;
	   return r;
	}
}
int main()
{
	int n,m;
    while(~scanf("%d%d",&n,&m))
    {
    	int x,y,gcd;
		gcd = exgcd(n,m,x,y);
        x = x*1/gcd;
        x = (x%(m/gcd)+(m/gcd))%(m/gcd);
		printf("%d\n",x);
    }
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

3314 扩展gcd

原文:http://blog.csdn.net/became_a_wolf/article/details/48129705

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!