裴(pei)蜀定理
引理:对于给定的正整数a,b,方程ax+by=c有解的充要条件为c是gcd(a,b)的整数倍
裴(pei)蜀定理:
方程ax+by+cz+…+nm=f(其中a,b,c…n,f为整数)有解的充要条件是f为gcd(a,b,c,…,n)的整数倍
定理的应用:
给定一个序列{an},求一个整数序列{bn}使得a1b1+a2b2+…+an*bn值最小(要求最小值为正数),求这个最小值
解:根据裴蜀定理的推广,原式最小值即为gcd(a1,a2…an)
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
const int MaxN = 22;
int n;
int a[MaxN], x[MaxN];
int gcd(int a, int b)
{
return b == 0? a : gcd(b, a % b);
}
void solve()
{
int ans = 0;
for(int i = 1; i <= n; ++i)
{
ans = gcd(ans, a[i]);
}
printf("%d\n", ans);
}
int main()
{
scanf("%d", &n);
for(int i = 1; i <= n; ++i)
{
scanf("%d", &a[i]);
if(a[i] < 0) a[i] *= -1;
}
solve();
return 0;
}
/*
2
4059 -1782
*/
/*
99
*/