洛谷 P1082 同余方程
题目描述
求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解。
输入输出格式
输入格式:
输入只有一行,包含两个正整数 a, b,用一个空格隔开。
输出格式:
输出只有一行,包含一个正整数 x0,即最小正整数解。输入数据保证一定有解。
输入输出样例
输入样例#1:
3 10
输出样例#1:
7
说明
【数据范围】
对于 40%的数据,2 ≤b≤ 1,000;
对于 60%的数据,2 ≤b≤ 50,000,000;
对于 100%的数据,2 ≤a, b≤ 2,000,000,000。
NOIP 2012 提高组 第二天 第一题
**************************************************************
1 /* 2 Problem: 3 OJ: 4 User:S.B.S. 5 Time: 6 Memory: 7 Length: 8 */ 9 #include<iostream> 10 #include<cstdio> 11 #include<cstring> 12 #include<cmath> 13 #include<algorithm> 14 #include<queue> 15 #include<cstdlib> 16 #include<iomanip> 17 #include<cassert> 18 #include<climits> 19 #include<functional> 20 #include<bitset> 21 #include<vector> 22 #include<list> 23 #include<map> 24 #define maxn 100001 25 #define F(i,j,k) for(int i=j;i<=k;i++) 26 #define rep(i,j,k) for(int i=j;i<k;i++) 27 #define M(a,b) memset(a,b,sizeof(a)) 28 #define FF(i,j,k) for(int i=j;i>=k;i--) 29 #define inf 0x3f3f3f3f 30 #define maxm 1001 31 #define mod 998244353 32 //#define LOCAL 33 using namespace std; 34 int read(){ 35 int x=0,f=1;char ch=getchar(); 36 while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} 37 while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} 38 return x*f; 39 } 40 void print(int n){ 41 if(n<0){putchar('-');n=0-n;} 42 if(n>=10) print(n/10); 43 putchar((n%10)+'0'); 44 return; 45 } 46 int n,m; 47 inline int exgcd(int a,int b,int &x,int &y) 48 { 49 if(!b){x=1;y=0;return a;} 50 int d=exgcd(b,a%b,x,y); 51 int temp=x;x=y;y=temp-a/b*y; 52 return d; 53 } 54 int main() 55 { 56 std::ios::sync_with_stdio(false);//cout<<setiosflags(ios::fixed)<<setprecision(1)<<y; 57 #ifdef LOCAL 58 freopen("data.in","r",stdin); 59 freopen("data.out","w",stdout); 60 #endif 61 int a,b;cin>>a>>b; 62 int x,y; 63 exgcd(a,b,x,y); 64 x=(x%b+b)%b; 65 cout<<x<<endl; 66 return 0; 67 }