【不定线性方程最小正数解】 贝祖定理

传送门

题意

给定一个包含\(n\)个整数元素的数列\(A\)\(A_{1},A_{2},\dots,A_{n}\)
求另一个待求的整数序列\(X\),记做\(S=\sum_{i=1}^{n}A_{i}\times X_{i}\),使得\(S>0\)\(S\)尽可能的小

数据范围

\(1\leq n\leq 20\)
\(|X_{i}|<10^{5}\)

题解

贝祖定理能得到二元不等式\(ax+by\)的最小正数解\(gcd(a,b)\),扩展到\(n\)元不等式等于

  • \(gcd(a,b,\dots,n)\)

\(n\)个数的最大公约数

Code

#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,n) for(int i=a;i<n;i++)
#define per(i,a,n) for(int i=n-1;i>=a;i--)

int n;

int gcd(int a,int b){return b?gcd(b,a%b):a;}
int main()
{
    cin>>n;
    int ans=0;
    int a;
    rep(i,1,n+1)
    {
        cin>>a;
        ans=gcd(abs(a),ans);
    }
    cout<<ans<<endl;
}

posted @ 2020-10-13 15:24  Hyx'  阅读(247)  评论(0)    收藏  举报