13.線性同餘方程
阿新 • • 發佈:2020-08-06
擴充套件歐幾里德演算法的簡單英語,就是求解線性同餘方程
先把這個等式做變形
只要保證b能整除a和m的最大公約數
就有解
1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 ll exgcd(ll a, ll b, ll &x, ll &y) { 5 if (!b) { 6 x = 1; 7 y = 0; 8 //x = 1, y = 0是一組解 9 return a; 10 }11 ll d = exgcd(b, a % b, y, x); //翻轉一下 12 y -= a / b * x; 13 return d; 14 } 15 int main() { 16 ios::sync_with_stdio(false); 17 cin.tie(0); 18 cout.tie(0); 19 int n; 20 cin >> n; 21 while (n--) { 22 ll a, b, m; 23 cin >> a >> b >> m;24 ll x, y; 25 ll d = exgcd(a, m, x, y); 26 if (b % d) { 27 cout << "impossible" << endl; 28 } else { 29 cout << x * (b / d) % m << endl; 30 } 31 } 32 return 0; 33 }