#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
long long gcd(long long a,long long b)
{
long long c;
while(b>0)
{
c=a%b;
a=b;
b=c;
}
return a;
}
int main()
{
int n,i;
int ans=0;
long long x,m=0,j;
cin>>n;
for(i=1;i<=n;i++)
{
cin>>x;
m=gcd(m,x);
}
long long y=sqrt(m);
for(j=1;j<=y;j++)
{
if(m%j==0)
{
ans+=2;
if(m/j==j)
ans--;
}
}
cout<<ans<<endl;
return 0;
}
一开始wa了然后发现没有全部long long 全部long long后又超时了 直接给哪个序列排了一个序求的最大最小值的最大公约数然后还是超时 所以问题在下面的for循环里 我一开始是让y=m/2 这样挨个遍历下来会费时间 然后又让y=sqrt(m) 这样如果i发现有能除尽的 就让ans+=2 因为能除尽肯定就有两个因子啊 然后如果 m/i=i 就像9/3=3 这样就让ans-1 不然就重复了