扩展裴蜀定理

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
" , ans);
    return 0;
}

  相关试题

https://www.cnblogs.com/GXZlegend/p/8611156.html

原文地址:https://www.cnblogs.com/cutemush/p/12801277.html