【发布时间】:2014-10-17 02:19:52
【问题描述】:
我正在努力使这个程序工作:
int main()
{
// prompt user for max number
// ...
// generate vector containing all numbers from 2 up to max
// ...
// give value 1 to not-prime numbers
// ...
// remove all not-prime numbers with value 1
// ...
// print out all numbers (all remaining are prime)
// ...
}
一切都很好,除了我需要识别素数并将其值更改为 1 的步骤。我尝试了所有方法,但我真的没有想法。这是我对该代码块的最后一个想法:
// give value 1 to not-prime numbers
for (int i = 2; i < int(sqrt(max)); i++)
{
for (int j = 0; j < numbers.size(); j++)
{
numbers[numbers[j] * i - 2] = 1;
}
}
,显然它不起作用。救命!
【问题讨论】:
-
不确定我是否在关注您,在Sieve of Eratosthenes 中,您首先假设所有数字都是素数,并丢弃发现为非素数的数字。此外,对于更高效的代码 - 如果 numbers[i] 不是素数,则需要终止内部循环的 if 条件。
-
o_O ?你说你将非素数设置为 1,然后你说你想将素数设置为 1……它是什么? :)
-
我想消除所有非质数,这只是向您展示我的想法的一些不成功的尝试。