NOIP2012提高组.同余方程
扩展欧几里得算法
·
目录
题目
算法标签: 数论, 扩展欧几里得算法
思路
简单的扩展欧几里得算法应用题, 扩展欧几里得算法可以直接计算同余方程的通解, 因为求得是最小正整数解, 因此需要取模转换为正整数
a x + b y ≡ 1 ax + by \equiv 1 ax+by≡1
代码
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
int a, b;
int exgcd(int a, int b, int &x, int &y) {
if (!b) {
x = 1, y = 0;
return a;
}
int gcd = exgcd(b, a % b, y, x);
y -= a / b * x;
return gcd;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
cin >> a >> b;
int x, y;
exgcd(a, b, x, y);
cout << (x % b + b) % b << "\n";
return 0;
}
更多推荐
所有评论(0)