我有一个编程任务,用 C++ 编写一个程序,该程序找到所有小于n的素数(用户输入)。一半的任务涉及埃拉托色尼筛。我的代码正在运行(阅读:分配完成),但在我编辑输出之前,它无条件地将n-3、n-2和n-1打印为素数,即使它们不是素数。我不确定为什么会这样。对于程序为何如此运作,我将不胜感激一些反馈和想法。这是未更改的代码:
请注意,我使用的是 ListNode 类和 LinkedList 类,它们都是功能齐全的。编辑:部分主要添加;注意for循环中的第二项是size-3。如果它保留在size,程序会输出 3 个额外的非素数。
int main()
{
for(int i = 0; i<my_list.size()-3; i++)
{
if(marked[i]==true)
cout<<my_list[i]<<"\n";
}
}
void eratosthenes(int item)
{
bool run=true;
int p=2, count=0;
for(int i=2; i<=item; i++)
{
my_list.append(i); // Entire list is filled with integers from 2 to n
marked.append(true); // Entire list is filled with true entries
}
while(run==true&&(2*p)<item)
{
count = 0;
int i = (2*p);
do {
marked[i-2]=false; // marked values are false and not prime
i+=p;
} while(i<item-2);
for(int i=0; i<item-2; i++) // i starts at 0 and increments by 1
{ // each time through the loop
if(my_list[i]>p)
{
if(marked[i]==true) // If a value stored in a node is true
{ // (prime), it becomes the new p.
p=my_list[i]; // The loop is then broken.
break;
}
}
}
for(int j=1; j<item-2; j++)
{
if(marked[j]==false)
{
count=1;
}
}
if(count==0)
run=false;
}