题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4961
AC代码:
#include <stdio.h>
#define inf 111111
#define ll __int64
ll a[inf],b[inf],c[inf],flag[inf],index[inf],ans;
int main(){
int n,i,j,ma,max,min;
while(~scanf("%d",&n),n){
ma=0;
for(i=1;i<=n;i++){
scanf("%I64d",&a[i]);
if(ma<a[i])
ma=a[i];
}
for(i=1;i<=ma;i++)
flag[i]=0;
for(i=1;i<=n;i++){
max=0;
for(j=a[i];j<=ma;j+=a[i]){
if(flag[j]){
if(max<index[j])
max=index[j];
}
}
flag[a[i]]=1;
index[a[i]]=i;
if(!max)
b[i]=a[i];
else
b[i]=a[max];
}
for(i=1;i<=ma;i++)
flag[i]=0;
for(i=n;i>=1;i--){
min=inf;
for(j=a[i];j<=ma;j+=a[i]){
if(flag[j]){
if(min>index[j])
min=index[j];
}
}
flag[a[i]]=1;
index[a[i]]=i;
if(min==inf)
c[i]=a[i];
else
c[i]=a[min];
}
ans=0;
for(i=1;i<=n;i++)
ans+=b[i]*c[i];
printf("%I64d\n",ans);
}
return 0;
}