1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #include<bits/stdc++.h> using namespace std; long long exgcd(long long a, long long b, long long &x1, long long &y1){ if (b == 0){ x1 = 1; y1 = 0; return a; } long long x, y; long long r = exgcd(b, a%b, x, y); x1 = y; y1 = x - a / b*y; return r; } int main(){ ios::sync_with_stdio(false); long long a, b; cin >> a >> b; long long x, y; exgcd(a, b, x, y); cout << (x + b) % b; } |
做题做的心力憔悴
20180807更新:
exgcd证明过程参见:https://renjikai.com/cpp-number-theory/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #include<iostream> #include<algorithm> #include<vector> #include<queue> #include<cstring> #define ll long long #define pii pair<int,int> #define PINF 0x7fffffff #define NINF 0x80000000 using namespace std; ll exgcd(ll a, ll b, ll &x, ll &y) { if (b == 0) { x = 1; y = 0; return a; } ll d = exgcd(b, a%b, y, x); y -= a / b * x; return d; } int main() { ll a, b, x, y; cin >> a >> b; exgcd(a, b, x, y); cout << (x%b + b) % b; } |