3 5 1 2 3 4 5 8 11 12 13 14 15 16 17 18 10 21 22 23 24 25 26 27 28 29 30
10 41 52
1 #include<iostream> 2 #include<cmath> 3 using namespace std; 4 int main(){ 5 int M,N,a,flag,sum; 6 cin>>M; 7 while(M--){ 8 cin>>N; 9 sum=0; 10 for(int i=0;i<N;i++){ 11 cin>>a; 12 flag=0; 13 if(a==1) 14 continue; 15 for(int j=2;j<=sqrt(a);j++) 16 if(a%j==0) 17 flag=1;//如果a不是素数,flag标记1 18 if(flag==0) 19 sum+=a; 20 } 21 cout<<sum<<endl; 22 } 23 return 0; 24 }
优化:
1 //素数打表,时间上更优化 2 #include<iostream> 3 int a[1010];//每个数小于1000,数组开到1010足够 4 int b[1010];//存放素数 5 using namespace std; 6 void prime(){ 7 for(int i=2;i<=1010;i++) 8 b[i]=1; 9 b[1]=0;//1不是素数 10 for(int i=2;i<=1010;i++) 11 for(int j=i+i;j<=1010;j+=i) 12 b[j]=0;//不是素数标记0,其余为1是素数 13 } 14 int main(){ 15 int N,M,sum; 16 cin>>M; 17 while(M--){ 18 cin>>N; 19 int sum=0; 20 prime(); 21 for(int i=0;i<N;i++){ 22 cin>>a[i]; 23 if(b[a[i]]==1) 24 sum+=a[i]; 25 } 26 cout<<sum<<endl; 27 } 28 return 0; 29 }
原文:https://www.cnblogs.com/geziyu/p/9320732.html