1

我认为我的代码有效。但是,它输出 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;
}
4

5 回答 5

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)您不需要检查所有数字 until isitprime,但至多sqrt(isitprimt)和(2)您只需要检查 until resultis false,此时您可以break退出循环。

于 2012-10-30T19:54:59.907 回答
3

输出一点也不奇怪。

cout<<prime<<endl;

您正在打印prime此处的函数指针。

您可能打算打印您在此处创建的变量:

 int prime = i;

但这是在循环范围内。事实上,如果你在编译时启用了警告,你的编译器应该告诉你这个变量永远不会被使用。此外,将 C 或 C++ 中的变量与函数(或更高级别范围内的任何其他变量)同名也是不好的做法。

于 2012-10-30T19:57:19.353 回答
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.
  //...
于 2012-10-30T20:02:50.177 回答
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();
                               }
于 2012-11-05T20:26:31.503 回答
-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;
}
于 2012-10-30T22:57:08.350 回答