求關於 x 的同餘方程 ax ≡ 1 (mod b)的最小正整數解。ios
輸入格式:ide
輸入只有一行,包含兩個正整數 a, b,用一個空格隔開。spa
輸出格式:code
輸出只有一行,包含一個正整數 x0,即最小正整數解。輸入數據保證必定有解。blog
3 10
7
【數據範圍】ip
對於 40%的數據,2 ≤b≤ 1,000;ci
對於 60%的數據,2 ≤b≤ 50,000,000;get
對於 100%的數據,2 ≤a, b≤ 2,000,000,000。string
NOIP 2012 提升組 次日 第一題it
**************************************************************
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 }