您的位置:首页 > 编程语言 > C语言/C++

acm素数求和问题

2016-12-05 12:48 246 查看
现在给你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


思路:将1000以内的素数先算出来放在数组中,然后让输入的数据取素数数组中找,要有相同的那么就是素数要求和

代码:

#include <stdio.h>
main(void)
{
int n,i,j,m,s=0,a[10000],z,b[10000],c[10000],k=0;
for (i=2;i<=1000;i++)
{
for (j=2;j<i;j++)
if (i%j==0)
break;
if (i==j)
b[k++]=i; //存放100以内素数
}
scanf("%d",&n);//n组测试数据
z=n;
k=0;
while (n--)
{

scanf("%d",&m);
for (i=0;i<m;i++)//输入要判断求和的项
{
scanf("%d",&a[i]);
}
for (i=0;i<m;i++)
for (j=0;j<=1000;j++) //在素数数组中找是否有相同的,有则是素数,要加
{
if (a[i]==b[j])
s+=a[i];
}
c[k++]=s;
s=0;

}
for (i=0;i<z;i++)
printf("%d\n",c[i]);

return 0;
}

最优代码:

#include<stdio.h>
#include <math.h>
int main()
{
int m,n,i,j,a[1000],flag=0;
long s;
scanf("%d",&m);
while(m--)
{
s=0;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]); //对n个数组进行输入
for(i=0;i<n;i++)
{
if(a[i]==1)
continue;
flag=0;
for(j=2;j<=sqrt(a[i]);j++)
{
if(a[i]%j==0)
{
flag=1;
break;
}
}
if(flag==0)
s+=a[i];
}
printf("%d\n",s);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言