#include<cstdio> #include<cstring> #include<string> #include<iostream> #include<set> #include<vector> using namespace std; typedef long long ll; const int mod=1000000007; set<ll> f[10005]; ll L[100005],R[100005],a[100005]; bool primer[10005]; int read() { int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f; } int main() { int n; for(ll i=1;i<=10000;i++) for(ll j=1;j*i<=10000;j++) f[i*j].insert(i); while(scanf("%d",&n)!=EOF) { for(ll i=1;i<=n;i++) { a[i]=read(); L[i]=1; R[i]=n; } for(ll i=1;i<=n;i++) { for(ll j=i-1;j>=1;j--) { if(f[a[i]].count(a[j])) { L[i]=j+1; break; } } for(ll j=i+1;j<=n;j++) { if(f[a[i]].count(a[j])) { R[i]=j-1; break; } } } ll ans=0; for(ll i=1;i<=n;i++) { ans=(ans%mod+(i-L[i]+1)*(R[i]-i+1)%mod)%mod; } printf("%lld\n",ans); } return 0; } |
Double click to view unformatted code.