时间限制: 1000 ms 空间限制: 262144 KB 具体限制
1 #include<bits/stdc++.h> 2 using namespace std; 3 struct s 4 { 5 long long b; 6 int g; 7 }a[100]; 8 bool cmd(s x,s y) 9 { 10 return x.b<x.b; 11 } 12 bool zs[600000],sf[10001]; 13 long long n,all,x,ans,maxn,f[510000]; 14 void zhishu() 15 { 16 for(int i=2;i<=600000;i++) 17 { 18 if(zs[i]==0) 19 { 20 int l=2; 21 while(i*l<=600000) 22 { 23 zs[i*l]=1; 24 l++; 25 } 26 } 27 } 28 zs[1]=1; 29 zs[0]=1; 30 } 31 int main() 32 { 33 zhishu(); 34 cin>>n; 35 for(int i=1;i<=n;i++) 36 { 37 cin>>x; 38 if(sf[x]==0) 39 { 40 a[++all].g=1; 41 a[all].b=x; 42 sf[x]=1; 43 } 44 else 45 for(int j=1;j<=all;j++) 46 if(a[j].b==x) 47 a[j].g++; 48 } 49 f[0]=1; 50 sort(a+1,a+1+all,cmd); 51 for(int i=1;i<=all;i++) 52 { 53 for(int j=maxn;j>=0;j--) 54 { 55 for(int k=1;k<=a[i].g;k++) 56 { 57 f[j+a[i].b*k]+=f[j]; 58 } 59 } 60 maxn+=a[i].b*a[i].g; 61 } 62 for(int i=1;i<=maxn;i++) 63 { 64 if(zs[i]==0) 65 ans+=f[i]; 66 } 67 cout<<ans; 68 return 0; 69 }