【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元一次不定方程,结论依然成立。

证明: $a_1x_1+a_2x_2$ 的取值范围为 $k·\gcd(a_1,a_2)$ ,相当于 $\gcd(a_1,a_2)$ 为新的系数, $k$ 为新的未知数,相当于合并了两个未知数。这样合并到低就是 $\gcd(a_1,a_2,...,a_n)x$,因此有整数解的充要条件是 $\gcd(a_1,a_2,...,a_n)|c$。

因此 $S$ 的取值集合就是 $\gcd(a_1,a_2,...,a_n)$ 的倍数,最小的正整数 $S$ 就是 $\gcd(a_1,a_2,...,a_n)$

#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;
}
时间: 2024-08-08 08:41:37

【bzoj1441】Min 扩展裴蜀定理的相关文章

[BZOJ1441&amp;BZOJ2257&amp;BZOJ2299]裴蜀定理

裴蜀定理 对于整系数方程ax+by=m,设d =(a,b) 方程有整数解当且仅当d|m 这个定理实际上在之前学习拓展欧几里得解不定方程的时候就已经运用到 拓展到多元的方程一样适用 BZOJ1441 给出n个数(A1...An)现求一组整数序列(X1...Xn)使得S=A1*X1+...An*Xn>0,且S的值最小 该方程有解当且仅当gcd(A1...AN)|s 要求s的值最小,那么答案就是gcd(A1..AN) BZOJ2257 jyy就一直想着尽快回地球,可惜他飞船的燃料不够了.有一天他又去向

【BZOJ】1441: Min(裴蜀定理)

http://www.lydsy.com/JudgeOnline/problem.php?id=1441 这东西竟然还有个名词叫裴蜀定理................ 裸题不说....<初等数论>上边写得很清楚:如果对于任意d|ai,有d|sum{aixi} 所以求出d就行了...显然gcd.. #include <cstdio> #include <cstring> #include <cmath> #include <string> #in

【BZOJ-1441】Min 裴蜀定理 + 最大公约数

1441: Min Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 471  Solved: 314[Submit][Status][Discuss] Description 给出n个数(A1...An)现求一组整数序列(X1...Xn)使得S=A1*X1+...An*Xn>0,且S的值最小 Input 第一行给出数字N,代表有N个数下面一行给出N个数 Output S的最小值 Sample Input 24059 -1782 Sample Outpu

扩展欧几里得算法、裴蜀定理与乘法逆元

扩展欧几里得算法 扩展欧几里得算法(扩O)能在求gcd(a,b)的同时求出丢番图方程ax+by=gcd(a, b)的解. 然而怎么求呢?我们观察gcd(a, b)=gcd(b, a%b),所以设如下两个方程: ax+by = gcd(a,b) = d: bx'+(a%b)y' = gcd(b,a%b): 明显gcd(a,b) = gcd(b,a%b),也就是ax+by = bx'+(a%b)y'. 为了求得x与y,我们需要保证a,b不变,所以:ax+by = bx'+(a%b)y' = bx'+

关于欧几里得算法,裴蜀定理,扩展欧几里得算法证明与解析

欧几里得算法 注:欧几里得算法是用来计算最大公约数的一个算法.主要的代码实现如下: int gcd(int a,int b){ return !b?a:gcd(b,a%b); } 如果这个式子成立的话,不断重复利用这个式子来计算,直到a和b中有一个数变为 0的时候,就可以求出了他们的最大公约数. 举个例子:我们要求gcd(15,30) 运行如下:gcd(15,30)=gcd(30,15)=gcd(15,0)此时的15便是gcd(15,30) 证明过程: 设g = gcd(a,b), 若使gcd(

Wannafly挑战赛22 A-计数器(gcd,裴蜀定理)

原题地址 题目描述 有一个计数器,计数器的初始值为0,每次操作你可以把计数器的值加上a1,a2,...,an中的任意一个整数,操作次数不限(可以为0次),问计数器的值对m取模后有几种可能. 输入描述: 第一行两个整数n,m接下来一行n个整数表示a1,a2,...,an1≤n≤1001≤m,a1,a2,...,an≤1000000000 输出描述: 输出一个整数表示答案 示例1 输入 复制 3 6 6 4 8 输出 复制 3 题解:假设K1为A1取的个数:根据题意题目变成a1*k1+a2*k2+a

BZOJ 2299 向量(裴蜀定理)

题意:给你一对数a,b,你可以任意使用(a,b), (a,-b), (-a,b), (-a,-b), (b,a), (b,-a), (-b,a), (-b,-a)这些向量,问你能不能拼出另一个向量(x,y). 实际上前四个向量能拼出(ma,nb)(m%2=n%2).后四个向量拼出(xb,ya)(x%2=y%2). 这样可以枚举这四个未知数在模二意义下的解.这两个向量相加为(ma+xb,nb+ya). 对于ma+xb=X.根据系数的奇偶性,如果有系数为奇数,可使得等式两边都减去一个数使得系数都为偶

贝祖定理(裴蜀定理)

在数论中,裴蜀定理是一个关于最大公约数(或最大公约式)的定理:若a,b是整数,且(a,b)=d,那么对于任意的整数x,y,ax+by=m中的m一定是d的倍数. 特别地,一定存在整数x,y,使ax+by=d成立,且不止一组,例如(12,42)=6,则方程12x + 42y = 6有解,事实上有(-3)×12 + 1×42 = 6及4×12 + (-1)×42 = 6. 而ax+by=1是a,b两数互质的充要条件,同样地,x,y不止一组. 参考:http://www.cnblogs.com/tekk

【BZOJ-2299】向量 裴蜀定理 + 最大公约数

2299: [HAOI2011]向量 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1118  Solved: 488[Submit][Status][Discuss] Description 给你一对数a,b,你可以任意使用(a,b), (a,-b), (-a,b), (-a,-b), (b,a), (b,-a), (-b,a), (-b,-a)这些向量,问你能不能拼出另一个向量(x,y). 说明:这里的拼就是使得你选出的向量之和为(x,y)