Eratosthenes筛选..找到范围内的素数。如何获得起点?

时间:2011-11-08 14:55:22

标签: primes sieve-of-eratosthenes

**注意:这与大学任务有关。我只是在正确的方向上寻求一些指导。

我有一个单线程解决方案来查找素数(Homework是转换为多线程解决方案)。它目前说要从要检查的数字列表开始。从第一个素数开始,2。(对于0 ... N)。

我希望能够将列表(0 ... N)分成类似(0 ... 25),(26 ... 50),(51 ... 75)和(76。 ..100)。

如果每个列表的起点是第一个素数。我怎么找到它?我必须有一个单独的功能来实现吗?

感谢。

2 个答案:

答案 0 :(得分:1)

我认为你需要一个多线程实现。您不需要每个列表都以素数开头。 (考虑到你想要计算什么,这实际上有点循环。)想想一组工人,每个人都有一个清单。不要让每个工人孤立地工作,而是考虑广播当前的筛选对象并让每个工人离开并将其应用于该工人的清单。等到每个工作人员报告完成该阶段,找到下一个素数,然后重复。

答案 1 :(得分:0)

要添加多线程,我只需使用一个变量来跟踪筛子的数量,并启动一个线程来删除这些数字的倍数。

int a = 2;
//run thread 1
while(sieve[a] == false)
    a++;
//run thread 2
//etc.

显然还有一点......但这是一般的想法。