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

3314 扩展gcd

时间:2015-08-31 10:09:03      阅读:161      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!