【题目】
求关于方程 ax ≡ 1 (mod b) 的最小正整数解。
【输入样例】
3 10
【输出样例】
7
【说明】
2≤a,b≤2,000,000,000
【分析】
同志们,这是一道扩展欧几里得算法的模板题啊。
方程可以写成ax-by=1,求不定方程解中x的最小正整数。
其特殊性可以证明gcd(a,b)==1,即a和b互质。
扩展欧几里得算法,请百度或翻开紫书P313
下面附上代码一份:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long LL;
void im_gcd(LL a,LL b,LL& x,LL& y)
{
if(!b)
{
x=1,y=0;
return ;
}
im_gcd(b,a%b,y,x);
y-=x*(a/b);
return ;
}
int main()
{
freopen("mod.in","r",stdin);
freopen("mod.out","w",stdout);
LL a,b,x,y;
cin>>a>>b;
im_gcd(a,b,x,y);
while(x<0)x+=b;
while(x-b>0)x-=b;
cout<<x<<endl;
return 0;
}