#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
const int mod=1e9+7;
typedef long long ll;
int a[maxn],l[maxn],r[maxn],pos[maxn];
int main()
{
int i,j,n;
ll ans;
while(scanf("%d",&n)!=EOF)
{
ans=0;
for(i=1;i<=n;i++)
scanf("%d",a+i);
memset(l,0,sizeof(l));
memset(pos,0,sizeof(pos));
for(i=1;i<=n;i++)
{
for(j=1;j*j<=a[i];j++)
if(a[i]%j==0)
l[i]=max(l[i],max(pos[j],pos[a[i]/j]));
pos[a[i]]=i;
r[i]=n+1;
}
for(i=0;i<=10000;i++)
pos[i]=n+1;
for(i=n;i;i--)
{
for(j=1;j*j<=a[i];j++)
if(a[i]%j==0)
r[i]=min(r[i],min(pos[j],pos[a[i]/j]));
pos[a[i]]=i;
}
for(i=1;i<=n;i++)
ans=(ans+(i-l[i])*(r[i]-i))%mod;
printf("%lld\n",ans);
}
return 0;
}
hdu 5288 简单思维 贡献思维
最新推荐文章于 2021-08-23 12:14:49 发布