用于循环数组赋值的C ++。得到垃圾回来了

时间:2012-03-27 06:03:01

标签: c++

我正在尝试生成LIMIT(让我们说限制= 1000)素数并将它们存储到数组中,但我得到了垃圾返回。这是我的代码:

#include <iostream>
using namespace std;
void prime_num(int);
int main()
{
    int primes[1000];
    int n, p, t, LIMIT = 1000;
    for(n=2; n <= LIMIT; n++)
    {
        t=0;
        for(p=2; p <= n/2; p++)
        {
            if (n%p == 0)
            {
                t = 1;
                break;
            }
        }
        if(!t) 
            primes[p-2] = n;
    }
    for (int i = 0; i < LIMIT; i++)
        cout << primes[i] <<" ";
    return 0;
}

1 个答案:

答案 0 :(得分:5)

在外部循环外定义变量:

int count=0;

然后在这里使用它:

primes[count++] = n;

然后打印为:

for (int i = 0; i < count; i++)
    cout << primes[i] <<" ";

说明:

您没有生成1000素数,而是生成小于或等于1000的所有素数。


正如@Jerry Coffin评论的那样,你的代码应该是这样的:

注意:我不是在谈论正确性,而是讨论程序的骨架;所以你决定is_prime()函数是否正确,优化与否,等等

bool  is_prime(int n)
{
        for(int p=2; p <= n/2; p++)
        {
            if (n%p == 0)
            {
                return false;
            }
        }
        return true;
}
int main()
{
    int primes[1000];
    int n, p, t, LIMIT = 1000;
    int count=0;
    for(n=2; n <= LIMIT; n++)
    {
       if (is_prime(n) )
          primes[count++] = n;
    }
    for (int i = 0; i < count; i++)
        cout << primes[i] <<" ";
    return 0;
}

is_prime()的正确性和优化:

现在您决定is_prime()的正确性。它是否写得正确?它是否优化?你真的需要检查[2,n/2]范围内的所有整数吗?