我认为我的代码有效。但是,它会输出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;
}
答案 0 :(得分:7)
cout<<prime<<endl;
打印函数bool prime (int i)
的地址,而不是您声明的变量。只需重命名函数或变量(请注意,您还必须更改其范围,或者在循环内移动cout
- 如果您想要全部打印它们):
for (int i = 3 ; PrimeNumbers <=10000; i++)
{
if(prime(i))
{
cout << i << endl;
PrimeNumbers++;
}
}
此外:
for(int j = 2; j < isitprime; j++) ///prime number tester
{
if(isitprime%j == 0) result = false;
}
可以进行优化,因为(1)您不需要检查isitprime
之前的所有数字,但最多只检查sqrt(isitprimt)
和(2)您只需要检查{{1} 1}}是result
,此时您可以false
退出循环。
答案 1 :(得分:3)
输出并不奇怪。
cout<<prime<<endl;
您正在此处打印prime
的函数指针。
您可能打算打印您在此处创建的变量:
int prime = i;
但这是在循环范围内。实际上,如果在启用警告的情况下进行编译,则编译器应该告诉您此变量从未使用过。另外,给C或C ++中的变量赋予与函数相同的名称(或更高级别范围内的任何其他变量)是不好的做法。
答案 2 :(得分:0)
主程序中的循环未正确停止,因为测试变量PrimeNumbers
可能不会更改
尝试:
for (int i = 3; i < 10000; i++)
{
//...
}
另外,因为您在prime
语句中声明了变量if
,所以在执行if
语句后它会消失:
if (prime(i))
{
int prime = i; // <-- Declare the variable before the for loop.
//...
答案 3 :(得分:0)
从第n到2找到素数的代码(1既不是素数也不是复合素)写在下面,我没有使用math.h头文件,做了不同的事情,并且令人惊讶的是它的工作非常酷.... 代码是:
#include<iostream.h>
#include<stdio.h>
#include<conio.h>
class prime
{
int a;
int i;
public:
void display();
};
void prime::display()
{
cout<<"Enter the number to see primes less than it till 2";
cin>>a;
int count=0;
for(int j=a;j>=1;j--)
{
for(int i=1;i<=j;i++)
{
if(j%i==0)
{
count++;
}
}
if(count==2)
{
cout<<"\t"<<j;
}
count=0;
}
}
void main()
{
clrscr();
prime k;
k.display();
getch();
}
答案 4 :(得分:-1)
如果你想找到从1到n的素数,希望这对你有帮助。
#include <iostream>
#include <vector>
static bool _isprime (int number)
{
if(number==1)
{
return false;
}
bool flag=true;
if(number==2||number%2!=0)
{
for(int i=2;i<number;i++)
{
if(number%i==0)
{
flag=false;
}
}
}
else flag=false;
return flag;
}
int main (void)
{
using namespace std;
vector<int> primenumber;
cout<<"prime number between 1 and ?"<<endl;
int x=0;
cin>>x;
for(int i=0;i<=x;i++)
{
if(_isprime(i)==true)
{
//cout<<x<<" is a prime number"<<endl;
primenumber.push_back(i);
}
//else cout<<x<<" is not a prime number"<<endl;
}
for(int i=0;i<primenumber.size();i++)
{
cout<<primenumber[i]<<endl;
}
cout<<"the number of prime number is "<<primenumber.size()<<endl;
system("pause");
return 0;
}