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); }