【发布时间】:2014-05-24 16:12:25
【问题描述】:
我对编程还很陌生,我刚开始使用 C++
我发现了这个问题,它涉及生成直到“n”的所有素数。这是我的代码,我假设“n”为 10。我已经尽力了。如果你们能告诉我出了什么问题,我将不胜感激。
单独块引用中的 for 循环无限重复,这意味着 i 的值没有被更新。我使用 cout 语句打印值,它不是 0 就是 1。为什么会这样?是不是逻辑有问题?
#include<iostream> #include<cstdlib> using namespace std; int main() { int NumList[10], flag[10]; int i,j; for(i = 0; i<10; i++) //Generate a list of numbers from 1 to 10 NumList[i] = i+1; for(i = 0; i<10; i++) // Create a flag array, initialized to 1 flag[i] = 1; for(i=1; i<10; i++) { if(NumList[i]%2==0) // Mark all even numbers in the list flag[i] = 0; // since they're not prime }
for(i = 2; i<10; i++) //Start from 3
{
if(flag[i]==1) // Check which numbers are left over
{
for(j = NumList[i]-1;j<10; ) //Since index = value-1 in this case
{
j+= NumList[i]; //Keep incrementing by value and marking in flag[]
flag[j] = 0;
}
}
}
}
【问题讨论】:
-
首先,您的代码看起来像是要消除 2 作为非素数。
-
我知道。我将在输出期间添加一个 2。这样做似乎更简单。
-
为什么不你告诉我们出了什么问题,也许我们可以解释为什么错了。
-
我检查过了。它进入了一个无限循环。我不知道为什么。
-
不...因为您在当前循环迭代完成之前访问越界。即你访问越界,然后然后检查j是否
标签: c++ primes sieve-of-eratosthenes