-
输入
-
第一行给出整数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;
}