扩展裴蜀定理
https://www.cnblogs.com/GXZlegend/p/7816147.html
【bzoj1441】Min 扩展裴蜀定理
题目描述
给出n个数(A1...An)现求一组整数序列(X1...Xn)使得S=A1*X1+...An*Xn>0,且S的值最小
输入
第一行给出数字N,代表有N个数 下面一行给出N个数
输出
S的最小值
样例输入
2
4059 -1782
样例输出
99
题解
裴蜀定理:二元一次不定方程 ax+by=c存在整数解的充分必要条件是 gcd(a,b)|c。
扩展裴蜀定理:改成n元一次不定方程,结论依然成立。
证明: a1x1+a2x2的取值范围为 k⋅gcd(a1,a2),相当于 gcd(a1,a2)为新的系数,k为新的未知数,相当于合并了两个未知数。这样合并到低就是 gcd(a1,a2,...,an)x,因此有整数解的充要条件是 gcd(a1,a2,...,an)|c。
因此S的取值集合就是 gcd(a1,a2,...,an)的倍数,最小的正整数S就是 gcd(a1,a2,...,an)
#include <cstdio> #include <algorithm> using namespace std; int main() { int n , x , ans = 0; scanf("%d" , &n); while(n -- ) scanf("%d" , &x) , ans = __gcd(ans , abs(x)); printf("%d\n" , ans); return 0; }
相关试题
https://www.cnblogs.com/GXZlegend/p/8611156.html