bzoj1441 Min 裴蜀定理

xiaoxiao2025-08-03  33

Description


给出n个数(A1…An)现求一组整数序列(X1…Xn)使得S=A1 * X1+…An * Xn>0,且S的值最小

Solution


裴蜀定理: 对于形如 a x + b y = c ax+by=c ax+by=c这样a、b、c都为正整数的不定方程,有解的条件是 g c d ( a , b ) ∣ c gcd(a,b)|c gcd(a,b)c 即当 c = g c d ( a , b ) c=gcd(a,b) c=gcd(a,b)时取得最小正整数

本题我们可以两两合并,最后得到 S = k ⋅ g c d ( a 1 , a 2 . . . a n ) ( k ∈ Z ) S=k\cdot gcd(a_1,a_2...a_n) \left(k\in Z\right) S=kgcd(a1,a2...an)(kZ) 显然k取1的时候最小

Code


#include <stdio.h> #include <string.h> #include <algorithm> #define rep(i,st,ed) for (int i=st;i<=ed;++i) int gcd(int x,int y) { return !y?x:gcd(y,x%y); } int main(void) { int n,x; scanf("%d",&n); scanf("%d",&x); int GCD=x; rep(i,2,n) { scanf("%d",&x); GCD=gcd(x,GCD); } printf("%d\n", abs(GCD)); return 0; }
转载请注明原文地址: https://www.6miu.com/read-5034202.html

最新回复(0)