我已经在Eratosthenes筛子上工作了几天了。它是今天到期的学校作业,我必须前往工作。代码工作得很完美,但是,我想把它优化成一个循环,而不是列出素数除数......任何建议?
void Eratos(int num, vector<int>&primes)
{
int i;
//we are setting up the variable for use
for (i = 2; i <= num; i++)
{
primes.push_back(i);
}
for (i = 0; i < primes.size(); i++)
{
if ((primes.at(i) % 2 == 0) && (primes.at(i) != 2))
{
//if i is divisible by 2 change value to zero... and so on until 13
primes.at(i) = 0;
}
if ((primes.at(i) % 3 == 0) && (primes.at(i) != 3))
{
primes.at(i) = 0;
}
if ((primes.at(i) % 5 == 0) && (primes.at(i) != 5))
{
primes.at(i) = 0;
}
if ((primes.at(i) % 7 == 0) && (primes.at(i) != 7))
{
primes.at(i) = 0;
}
if ((primes.at(i) % 13 == 0) && (primes.at(i) != 13))
{
primes.at(i) = 0;
}
if ((primes.at(i) % 17 == 0) && (primes.at(i) != 17))
{
primes.at(i) = 0;
}
if ((primes.at(i) % 19 == 0) && (primes.at(i) != 19))
{
primes.at(i) = 0;
}
if ((primes.at(i) % 23 == 0) && (primes.at(i) != 23))
{
primes.at(i) = 0;
}
if (primes.at(i) == 0)
{
//erase all '0' values from vector
primes.erase(primes.begin() + i);
//keep place
--i;
}
(抱歉,如果格式很奇怪,这是我在这里发表的第一篇文章)
答案 0 :(得分:0)
不要列出所有号码!
保留您已找到的素数列表,并尝试将所测试的数字除以找到的素数。