您的位置:首页 > 其它

【noip2012】同余方程

2015-11-03 15:30 232 查看

【noip2012】同余方程


描述

求关于 x的同余方程  ax ≡ 1(mod b) 的最小正整数解。


输入格式

输入文件 mod.in

输入只有一行,包含两个正整数a,b,用一个空格隔开。


输出格式

输出文件 为 modmod .out 。

输出只有一行,包含一个正整数,包含一个正整数 ,包含一个正整数 x0,即最小正整数解。 输入据保证一定有解。


测试样例1


输入

3 10


输出

7


备注

对于 40% 的数据    2 ≤b≤1,000

对于 60% 的数据    2 ≤b≤50,000,000

对于 100%的数据    2 ≤a, b≤2,000,000,000NOIP2012-TG

 由ax ≡ 1(mod b) 可以推出(ax-1)%b=0

那么ax%b=1,ax-kb=1

题目又说保证一定有解

那么就一定存在整数x,k,使ax-kb=1

由裴蜀定理可知,ax-kb=1与gcd(a,b)=1是充要条件

所以ax-kb=gcd(a,b),这就变成了扩展欧几里德的基本形式

那么我们就可以求出一组解x,y

根据

x加上b/gcd(a,b),同时y减去a/gcd(a,b)后,仍满足ax+by=c

我们可以求出最小的整数解
【代码】
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int a,b,x,y,ans;
int ExGcd(int a,int b){
if (b==0){
x=1; y=0; return a;
}
ans=ExGcd(b,a%b);
int tmp=y;
y=x-(a/b)*y;
x=tmp;
return ans;
}
int main(){
scanf("%d%d",&a,&b);
int gcdx=ExGcd(a,b);
x=(x%b+b)%b;
printf("%d",x);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: