题意
给出 n n n个数 A A A,求一组整数 X X X,使 X 1 A 1 + . . . X n A n X_1A_1+...X_nA_n X1A1+...XnAn最小,求这个最小值。
思路
裴蜀定理:
关于不定方程
a
x
+
b
y
=
c
ax+by=c
ax+by=c有整数解的充要条件是
(
a
,
b
)
∣
c
(a,b)|c
(a,b)∣c。
对于多个数,我们可以发现 c c c的值为 ( a , b ) (a,b) (a,b)的倍数,那么可以看做是 a a a,然后和下一个数计算。所以答案就是它们的 g c d gcd gcd了。
代码
#include<cstdio>
#include<algorithm>
int n, ans;
int main() {
scanf("%d", &n);
for (int i = 1, a; i <= n; i++) {
scanf("%d", &a);
a = a < 0 ? -a : a;
ans = std::__gcd(ans, a);
}
printf("%d", ans);
}