【发布时间】:2014-01-11 16:48:55
【问题描述】:
我一直在尝试解决素数生成算法的 SPOJ 问题。
问题来了
Peter 想为他的密码系统生成一些素数。帮助 他!你的任务是生成两个给定的所有素数 数字!
输入
输入以单行中的测试用例数量 t 开头 (t
输出
对于每个测试用例,打印所有质数 p,使得 m
很简单,但是网上的判断显示错误,我没有明白“测试用例”是什么意思,为什么需要使用1000000范围。
这是我的代码。
#include<stdio.h>
main()
{
int i, num1, num2, j;
int div = 0;
scanf("%d %d", &num1, &num2);
for(i=num1; i<=num2; i++)
{
for(j=1; j<=i; j++)
{
if(i%j == 0)
{
div++;
}
}
if(div == 2)
{
printf("%d\n", i);
}
div = 0;
}
return 0;
}
【问题讨论】:
-
阅读 CPPunit - 请参阅 sourceforge.net/apps/mediawiki/cppunit/…
-
使用分段!
-
j从 1 开始,所有数字%1都给 0... 那么你不必将所有数字都做到 i (sqrt(i ) 足够的)。然后你有很多算法在网上做这件事。 -
@ring0 是的,这是我的错误 sqrt(i) 就足够了,但是所有数字 %1 都给出 0,素数的定义,素数是可以被一和自身整除的数字,所以我有直到我达不到 sqrt(i) 为止。数字范围很小,因此数字将被快速处理,这没有问题。这个算法是我自己写的,这个算法比网上其他算法最简单
-
正如我所看到的问题,Eratosthenes 的 seive 不适用于此数据。您必须使用分段的 seive。 sweet.ua.pt/tos/software/prime_sieve.html