思路:
本题可以使用裴蜀定理,对任意x、y,A*x+b*y等于x、y的最小公倍数的倍数。与定理不同的是,本题需要的不是两组数,而是n组。所以我们可以求出全部数的最小公倍数,便可知道S的最小值。
代码:
#include<bits/stdc++.h>
using namespace std;
long long gcd(long long a,long long b){
return b?gcd(b,a%b):a;
}//辗转相除求最小公倍数
int main(){
int ans=0,n,a;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a;
if(a<0) a=-a;//如果是负数就取绝对值。
//因为s要是最小的正数
ans=gcd(ans,a);//求出全部数的最小公倍数
}
cout<<ans<<endl;
return 0;
}