1. 程式人生 > 實用技巧 >13.線性同餘方程

13.線性同餘方程

擴充套件歐幾里德演算法的簡單英語,就是求解線性同餘方程

先把這個等式做變形

只要保證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 }