http://www.cogs.pro/cogs/page/page.php?aid=16

期望得分:100+100+0=0

实际得分:100+20+0=120

T2线段树标记下传出错

T1 同余方程

时间限制:1 s   内存限制:128 MB

【题目描述】

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

【输入格式】

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

【输出格式】

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

【样例输入】

3 10

【样例输出】

7

【数据范围】

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

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

对于 100%的数据,2 ≤a, b≤ 2,000,000,000。

拓展欧几里得算法,原理:http://www.cnblogs.com/TheRoadToTheGold/p/6645383.html

方程可化为ax+by=1

方程ax+by=g 有解的条件是 g是gcd(a,b)的倍数

所以a,b一定互质

所以求出的x若为负数,x=x+ b/gcd(a,b)=x+b

#include<cstdio>
using namespace std;
long long exgcd(int a,int b,long long x,long long &y)
{
    if(!b)
    {
        x=0;y=1;
        return y;
    }
    long long t=exgcd(b,a%b,x,y);
    x=y;y=t-(long long)a/b*x;
    return x;
}
int main()
{
    freopen("mod.in","r",stdin);
    freopen("mod.out","w",stdout);
    int a,b;
    long long x=0,y=0;
    scanf("%d%d",&a,&b);
    x=exgcd(a,b,x,y);
    if(x<0) x+=b;
    printf("%lld",x);
}
View Code

相关文章: