题目大意:给定数列求其约数个数
思路:求最大公约数,针对最大公约数i*i优化,注意加上另一半的和,统计个数即可
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int main(){
int n;
scanf("%d",&n);
int64_t g=0;
while(n--){//求最大公约数
int64_t x;
cin>>x;
g=__gcd(g,x);
}
int res=0;//平方优化
for(int64_t i=1;i*i<=g;i++){
if(g%i==0){//求另一半
res+=1+(i*i!=g);
}
}
cout<<res<<endl;
return 0;
}