NOIP201208同余方程

                                                    NOIP201208同余方程

描述

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

格式

输入格式

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

输出格式

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

样例1

样例输入1[复制]

 
3 10

样例输出1[复制]

 
7

限制

每个测试点1s

提示

对于40%的数据,2 ≤b≤ 1,000; 
对于60%的数据,2 ≤b≤ 50,000,000; 
对于100%的数据,2 ≤a, b≤ 2,000,000,000。

二话不说,用扩展欧几里得算法吧,除非想时间超限~~~

 1 #include<iostream>
 2 using namespace std;  
 3 long long a,b,x,y;  
 4 long long gcd(long long  a,long long b,long long &x,long long &y)  
 5 {  
 6     if (b==0)
 7     { 
 8         x=1;
 9         y=0;
10         return a;
11     }  
12     else
13     {   
14          long long ans=gcd(b,a%b,x,y);   
15          long long t=x; x=y; y=t-(a/b)*y;  
16          return ans;  
17     }  
18 }  
19 int main()  
20 {  
21     cin>>a>>b;  
22     long long ans=gcd(a,b,x,y);
23     x=x%b;
24     while(x<0)x+=b;
25     cout<<x<<endl;
26     return 0;  
27 } 
View Code
原文地址:https://www.cnblogs.com/wxjor/p/5446803.html