素数查找器找不到素数,7点后停止

时间:2014-10-06 02:56:08

标签: c++ linux primes

所以我为3到200之间的数字做了一个简单的素数查找器。它必须使用一个布尔变量,只需要fyi。没有错误发生。输出是:

  

3到200之间的素数是:
  3
  5
  7

为什么不继续?我一次又一次地在纸上画出来,找不到我的逻辑错误。

另外;我是手工写的,因为我不知道如何获取文件的内容。它存在于我没有root访问权限的远程主机上。有没有更好的方法来复制文件?

#include <iostream>
using namespace std;

int main()
{
int count=0;
cout<<"The prime numbers between 3 and 200 are: "<<endl;

for (int i=3;i<=200;i++)
    {
     for (int j=2;j<i;j++)
        {
           bool ptest=i%j;
           if (!ptest)
             {
               break;
             }
           else if (ptest)
             {
                count=count+1;
                if (count==(i-2))
                cout<<i<<endl;
             }
         }
    }
}

3 个答案:

答案 0 :(得分:1)

count循环中使用后,您忘记将0设置回j。移动线:

int count = 0;

位于第一个for循环内。然后你的程序正常工作(虽然msw指出,它不是最有效的技术!)

答案 1 :(得分:0)

需要考虑的一些事项:

  1. 您不需要考虑代码中的任何偶数。

  2. 您的代码中存在一些逻辑错误。在第二个count循环后需要检查for的值。在第二个count循环开始之前,需要重置for

  3. 您可以在内循环中找到数字不是素数后立即停止,而不是继续。您只需使用标记isPrime而不是计数。

  4. 以下是适用于我的代码版本:

    #include <iostream>
    using namespace std;
    
    int main()
    {
       cout << "The prime numbers between 3 and 200 are: " <<endl;
    
       for (int i=3; i <= 200; i += 2) {
          bool isPrime = true;
          for (int j=3; j < i; j += 2) {
             if (i % j == 0) {
                isPrime = false;
                break;
             }
          }
    
          if (isPrime)
          {
             cout << i << endl;
          }
       }
    }
    

答案 2 :(得分:0)

你不必循环直到j到达i,而你可以检查是否 j < sqrt(i) ,即。写入第二个for循环: for (int j=3; j*j<=i; j+=2)