ACM题目:素数求和问题

JasinYip 2014-03-31 05:43:50
描述
引用
现在给你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

------我的代码------

#include <stdio.h>
#include <math.h>
#pragma warning(disable:4996)
int prime(int Num)
{ //if Num is a prime number, return 1
int i;
for (i = 2; i <= sqrt(Num); i++)
if (Num%i == 0)
return(0);
return(1);
}

main()
{
int Qty, QtyLtl, Num; //quantity
int j, k, Sum[10] = { 0 };
scanf("%d", &Qty);

for (k=1; k<=Qty; k++)
{
scanf("%d", &QtyLtl);
for (j=1; j<=QtyLtl; j++)
{
scanf("%d", &Num);
if ((prime(Num)==1) && (Num!=1))
Sum[k]=Sum[k]+Num;
}
}
for (k=1; k<=Qty; k++)
{
printf("%d\n", Sum[k]);
}

}

自己测试没啥问题啊,怎么提交上去就说WrongAnswer呢?
...全文
311 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
独孤过儿 2014-04-05
  • 打赏
  • 举报
回复
试试这个算法 “sieve of eratosthenes”
JasinYip 2014-04-04
  • 打赏
  • 举报
回复
引用 2 楼 oYinGui1 的回复:
还有main没返回值这种写法,早过时了。。。书上这么写就把书扔了吧。。。
请教一下,为什么main要int,然后最后还要return 0??
Morrisss_ 2014-04-04
  • 打赏
  • 举报
回复
引用 4 楼 alexbem 的回复:
[quote=引用 2 楼 oYinGui1 的回复:] 还有main没返回值这种写法,早过时了。。。书上这么写就把书扔了吧。。。
请教一下,为什么main要int,然后最后还要return 0??[/quote] 返回个值判断一下执行的情况呗。。0是表示正确执行,其它值就是系统定义的了,代表不同含义。
火星守门员 2014-04-04
  • 打赏
  • 举报
回复
题目说:0<M<10;0<N<1000,每个数都小于1000 假如系统测试用例m=9 切每个N都为999个数每个数都为999那样你的程序很吃力了。还有你的循环怎么不从0开始。边界问题值得思考一下。附上修改了的代码。
#include <stdio.h>
#include <math.h>

int prm[1001]={0};//0表示是素数,1表示不是 

void prime()	
{	//if Num is a prime number, return 1
	int i,Num=2;
	prm[1]=1;
	prm[0]=1;		
	while(Num<=1000)
	{for (i = 2; i <= sqrt(Num); i++)
		if (Num%i == 0)
			{prm[Num]=1;
			break;} 
	Num++;
	}	
}

main()
{	
	int Qty, QtyLtl, Num;	//quantity
	int j, k, Sum[10] = { 0 };
	scanf("%d", &Qty);
	prime();
	for (k=0; k<Qty; k++)
	{
		scanf("%d", &QtyLtl);
		for (j=0; j<QtyLtl; j++)
		{
			scanf("%d", &Num);
			if (prm[Num]==0)    //只需查表prm中是不是素数直接判断就可以了。 
				Sum[k]=Sum[k]+Num;
		}
	}
	for (k=0; k<Qty; k++)
	{
		printf("%d\n", Sum[k]);
	}

}
火星守门员 2014-04-04
  • 打赏
  • 举报
回复
我想问一下楼主 你的提交结果是wa 还是运行超时。我觉得应该是超时吧。我觉得这题应该打表。你先回复到底是哪种错误类型。然后我再看看
百曉生 2014-03-31
  • 打赏
  • 举报
回复
int main(void)



	return 0;
改成这种的,不要再直接main()了
Morrisss_ 2014-03-31
  • 打赏
  • 举报
回复
还有main没返回值这种写法,早过时了。。。书上这么写就把书扔了吧。。。
Morrisss_ 2014-03-31
  • 打赏
  • 举报
回复
一般都要求个多次输入吧。。。搞个可以输入多次的就差不多了。

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧