素数求和问题
Posted geziyu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了素数求和问题相关的知识,希望对你有一定的参考价值。
- 描述
- 现在给你N个数(0<N<1000),现在要求你写出一个程序,找出这N个数中的所有素数,并求和。
- 输入
- 第一行给出整数M(0<M<10)代表多少组测试数据
每组测试数据第一行给你N,代表该组测试数据的数量。
接下来的N个数为要测试的数据,每个数小于1000 - 输出
- 每组测试数据结果占一行,输出给出的测试数据的所有素数和
- 样例输入
-
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 }
以上是关于素数求和问题的主要内容,如果未能解决你的问题,请参考以下文章