n(ユーザー入力)未満のすべての素数を検出するプログラムをC++で作成するためのプログラミング割り当てがあります。課題の半分はエラトステネスのふるいに関係しています。私のコードは機能しています(読み取り:割り当てが完了しました)が、出力を編集する前は、 n-3、n-2、およびn-1が素数でなくても、無条件に素数として出力されていました。なぜこれが起こっているのかわかりません。プログラムがそのように機能している理由について、少しのフィードバックとアイデアをいただければ幸いです。変更されていないコードは次のとおりです。
ListNodeクラスとLinkedListクラスを使用していることに注意してください。どちらも完全に機能しています。編集:部分的なメインが追加されました。forループの2番目の項目がサイズ3であることに注意してください。サイズのままにしておくと、プログラムは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;
}