我正在尝试生成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;
}
答案 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]
范围内的所有整数吗?