我认为我的代码有效.但是,它输出01111E5或17B879DD,或类似的东西.
有人可以告诉我为什么.
我知道我设置了P的限制而不是10,001.我的代码是这样的,因为我从3开始,跳过素数2.
#include <iostream>
bool prime (int i)
{
bool result = true;
int isitprime = i;
for(int j = 2; j < isitprime; j++) ///prime number tester
{
if(isitprime%j == 0) result = false;
}
return result;
}
int main (void)
{
using namespace std;
int PrimeNumbers = 1;
int x = 0;
for (int i = 3 ; PrimeNumbers <=10000; i++)
{
if(prime(i))
{
int prime = i;
PrimeNumbers +=1;
}
}
cout<<prime<<endl;
system ("pause");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
cout<<prime<<endl;
Run Code Online (Sandbox Code Playgroud)
打印函数的地址bool prime (int i),而不是您声明的变量.只需重命名函数或变量(请注意,您还必须更改其范围,或者移动cout循环内部 - 如果您想要全部打印它们):
for (int i = 3 ; PrimeNumbers <=10000; i++)
{
if(prime(i))
{
cout << i << endl;
PrimeNumbers++;
}
}
Run Code Online (Sandbox Code Playgroud)
也:
for(int j = 2; j < isitprime; j++) ///prime number tester
{
if(isitprime%j == 0) result = false;
}
Run Code Online (Sandbox Code Playgroud)
可以优化,因为(1)你不需要检查,直至所有的数字isitprime,但顶多sqrt(isitprimt)和(2)您只需要检查到result是false,在这一点,你可以break退出循环.