题解:P4549 【模板】裴蜀定理

· · 题解

裴蜀定理

裴蜀定理是数论中的重要分块,其内容大致如下: 对于任意不全为零的整数 ab,存在整数 xy,使得:

ax + by = \gcd(a,b)

将这个定理推广到多个整数的情况。对于 n 个整数 A_1,A_2,A_3,\ldots,A_n(不全为零),存在整数序列 X_1,X_2,X_3,\ldots,X_n 使得:

\sum_{i=1}^n A_i \times X_i = \gcd(A_1,A_2,A_3,\ldots,A_n)

题目解析

题目要求我们找到一个整数序列 X,使得 S = \sum\limits_{i=1}^n A_i \times X_i 为正数,并且 S 尽可能小。根据定理,S 的最小正值就是所有 A_i 的绝对值的最大公约数。这是因为:

int main() { ios::sync_with_stdio(0); cin.tie(0), cout.tie(0); cin >> n; int m = 0; for (int i = 1; i <= n; ++i) { cin >> a; a = abs(a); m = gcdd(m, a); } cout << m; return 0; }


### 复杂度分析
* 时间复杂度:$O(n \cdot \log(\max(|A_i|)))$。
* 空间复杂度:$O(n)$。