#include<stdio.h> #include<math.h> #include<stdlib.h> #include<string.h> #define N 100011 int mod=1e9+7; int a[N],l[N],r[N],n; void findleft(int x) { int i,flag=0; for(i=x-1;i>=1;i--) { if(a[x]%a[i]==0) { flag=1; l[x]=i+1; break; } } if(flag==0) l[x]=1; } void findright(int x) { int i,flag=0; for(i=x+1;i<=n;i++) { if(a[x]%a[i]==0) { flag=1; r[x]=i-1; break; } } if(flag==0) r[x]=n; } int main() { //freopen("1001.in","r",stdin); int i; long long cnt; while(scanf("%d",&n)!=EOF) { cnt=0; for(i=1;i<=n;i++) { r[i]=l[i]=i; scanf("%d",&a[i]); } for(i=1;i<=n;i++) { findleft(i); findright(i); } for(i=1;i<=n;i++) { cnt=(cnt+(long long)(i-l[i]+1)*(r[i]-i+1)%mod)%mod; } printf("%I64d\n",cnt); } return 0; } |
Double click to view unformatted code.