NOIP2012 Day2 同余方程

【题目】

求关于方程 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;
}

猜你喜欢

转载自blog.csdn.net/xyc1719/article/details/80944711