没有查找素数计划的响应

时间:2016-02-13 04:36:47

标签: c++

我被困在编程任务中 此赋值使用bool数组来查找2到N之间的素数 它的方法是所有素数“索引”将设置为true而其他将设置为false,所以最后它只是打印出真正的索引 这是我的代码

#include <iostream>
#include <ctime>
using namespace std;

int main(){
    int n,i;
    int count = 0;
    cout << "Enter the value of n: ";
    cin >> n;
    bool* prime = new bool[n];
    for (i=0;i<=n;i++)
        prime[i] = true;
    for (i=2;i<=n;i++)
        if (prime[i])
            for (int j=n;j=i;j--)
                if (j%i == 0)
                    prime[j] = false;
    cout << "Prime numbers: ";
    for (i=2;i<=n;i++)
        if(prime[i])
            {cout << i <<", ";
             count++;}
    cout << count <<" primes found.";


    //hold the windows
    system("pause");
    return 0;
}

它的问题是在我输入N的值之后,程序没有响应并且没有显示任何东西。

2 个答案:

答案 0 :(得分:4)

只是略过代码,我可以看到你在这一行上使用了错误的运算符:

for (int j=n;j=i;j--)

j=i应该是j==ij=i使用赋值运算符(=)而不是比较运算符(==),如果i非零,则始终求值为true,从而创建无限运算符循环 - 意味着没有输出等

<小时/> 旁注

您可能希望查看n的边界检查。如果用户输入负数怎么办? bool* prime = new bool[n];会尝试生成一个负大小的数组,这是不可能的(除非将数字转换为无符号值,在这种情况下你会有大量的布尔值)

答案 1 :(得分:3)

我在查看数组的初始化时看到了一个错误:

bool* prime = new bool[n];

素数中的元素将从0到n-1。 然后,有一个循环将值设置为true。在某些时候,我= = n:

for (i=0;i<=n;i++)
    prime[i] = true;

当i == n时,你在数组中写的太多了。这可能会覆盖返回地址。

程序员经常尝试创建所需大小的数组。除非需要大量存储空间,否则我喜欢创建一个有点太大的数组。这减少了缓冲区溢出错误导致我的代码漏洞利用的可能性。

bool* prime = new bool[n + 20];

你会惊讶地发现这种练习可以节省你的时间。