题意
求 n n n 个数的最大公因数。
思路
怪兽的攻击方式相似于求最大公因数,所以可以用辗转相除法求最大公因数避免重复循环。
辗转相除法就是用两个数轮流取模。当一个数是 0 0 0 时,另一个数就是原先两个数的最大公因数
多个数的最大公因数满足: gcd ( a , b , c ) = gcd ( a , gcd ( b , c ) ) \gcd(a,b,c) = \gcd(a,\gcd(b,c)) gcd(a,b,c)=gcd(a,gcd(b,c)),证明可以参考这篇题解
代码
#include<bits/stdc++.h>
using namespace std;
int gcd(int a,int b) {
return b?gcd(b,a % b):a;//辗转相除法
}
int main() {
int a,ans;
cin>>a;
for(int i = 1;i <= a;i++) {
int b;
cin>>b;
if(i == 1) ans = b;
else ans = gcd(ans,b);
}
cout<<ans;
}