思路:计算第i个数中包含的每个素数对答案的贡献(其贡献的区间为[i,i+1,i+2...n],则贡献为n-i+1)
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int n,a[1000010];
vector<int> v[1000010];
int main()
{
for(int i=2;i<1000010;i++)
v[i].push_back(0);
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
int m=a[i];
for(int j=2;j<=sqrt(m);j++){
if(m%j==0){
v[j].push_back(i);
while(m%j==0)
m/=j;
}
}
if(m>1)
v[m].push_back(i);
}
ll ans=0;
for(ll i=2;i<1000010;i++){
for(ll k=1;k<v[i].size();k++)
ans+=(ll)(n-v[i][k]+1)*(v[i][k]-v[i][k-1]);
}
printf("%lld\n",ans);
}