https://codeforces.com/gym/101981/attachments
分析:从后往前推,计算每个数的质因子产生的贡献累加即可。
#include "bits/stdc++.h"
using namespace std;
const int mod = 1000000007;
int a[1000004];
vector<int>v[1000004];
int mp[1000004];
int main(){
int n;
cin>>n;
//init();
for (int i = 1; i <= n; ++i) {
scanf("%d",&a[i]);
for (int j = 2; j*j <= a[i]; ++j) {
if(a[i]%j==0)
{
v[i].push_back(j);
while(a[i]%j==0)a[i]/=j;
}
}
if(a[i]!=1)v[i].push_back(a[i]);
}
for (int i = 1; i <= 1000000; ++i) {
mp[i]=n+1;
}
long long ans=0;
long long sum=0;
for (int i = n; i >= 1; --i) {
for (int j = 0; j < v[i].size(); ++j) {
sum+=mp[v[i][j]]-i;
mp[v[i][j]]=i;
}
ans+=sum;
}
cout<<ans<<endl;
}