我已经在埃拉托色尼的筛子上工作几天了。今天是学校的作业,我得去上班了。代码运行完美,但是,我想将其优化为一个循环,而不是列出素除数……有什么建议吗?
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;
}(如果格式很奇怪,很抱歉,这是我在这里的第一篇文章)
发布于 2015-01-30 00:56:02
不要保存所有数字的列表!
保留一个你已经找到的素数列表,并且只尝试将测试中的数字与找到的素数相除。
https://stackoverflow.com/questions/28219593
复制相似问题