标签:exgcd names pac log int res div 题目 扩展欧几里得算法
求关于 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。
NOIP 2012 提高组 第二天 第一题
ax-by=1
扩展欧几里得算法。
1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<cmath> 5 using namespace std; 6 int a,b; 7 void exgcd(int a,int b,int &x,int &y){ 8 if(b==0){ 9 x=1;y=0; 10 return; 11 } 12 exgcd(b,a%b,x,y); 13 int t=x;x=y;y=t-a/b*y; 14 } 15 /*int exgcd(int a,int b,int &x,int &y){ 16 if(b==0){ 17 x=1;y=0; 18 return a; 19 } 20 int res=exgcd(a,a%b,y,x); 21 y-=a/b*x; 22 return res; 23 }*/ 24 int main(){ 25 scanf("%d%d",&a,&b); 26 int x,y; 27 exgcd(a,b,x,y); 28 x=(x%b+b)%b; 29 printf("%d\n",x); 30 return 0; 31 }
标签:exgcd names pac log int res div 题目 扩展欧几里得算法
原文地址:http://www.cnblogs.com/SilverNebula/p/6058363.html