标签:
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)
Total Submission(s): 256 Accepted Submission(s): 94
1 #include <math.h> 2 #include <stdio.h> 3 #include <string.h> 4 #include <algorithm> 5 using namespace std; 6 7 const int mod=1e9+7; 8 9 int main() 10 { 11 int n,i,j,k; 12 int str[100005],spfa[10005],l[100005],r[100005]; 13 int s; 14 while(scanf("%d",&n)!=EOF) 15 { 16 for(i=1;i<=n;i++) 17 scanf("%d",&str[i]); 18 for(i=1;i<=10000;i++) 19 spfa[i]=0; 20 for(i=1;i<=n;i++) 21 l[i]=0,r[i]=n+1; 22 for(i=1;i<=n;i++) 23 { 24 for(j=1;j<=sqrt(str[i]);j++) 25 { 26 if(str[i]%j==0) 27 { 28 if(spfa[j]>l[i]) 29 l[i]=spfa[j]; 30 if(spfa[str[i]/j]>l[i]) 31 l[i]=spfa[str[i]/j]; 32 } 33 } 34 spfa[str[i]]=i; 35 } 36 for(i=10000;i>=1;i--) 37 spfa[i]=n+1; 38 for(i=n;i>=1;i--) 39 { 40 for(j=1;j<=sqrt(str[i]);j++) 41 { 42 if(str[i]%j==0) 43 { 44 if(spfa[j]<r[i]) 45 r[i]=spfa[j]; 46 if(spfa[str[i]/j]<r[i]) 47 r[i]=spfa[str[i]/j]; 48 } 49 } 50 spfa[str[i]]=i; 51 } 52 s=0; 53 for(i=1;i<=n;i++) 54 { 55 s=(s+(i-l[i])*(r[i]-i)%mod)%mod; 56 } 57 printf("%d\n",s); 58 } 59 return 0; 60 }
标签:
原文地址:http://www.cnblogs.com/cyd308/p/4665556.html