for循环错误计算素数C ++

时间:2014-04-21 02:10:42

标签: c++ visual-c++

我正在尝试学习如何编码,而我正在努力学习我的代码有什么问题。我正在使用C ++中的Visual Studio 2013进行编程。

问题:编写程序以从用户读取数字N,然后找到第一个N素数。素数是一个只有两个除数的数字,一个和它本身。

不是我的代码打印出一系列素数,而是重复一些素数。

#include <iostream>
using namespace std;
// this program will calculate the first N primes


int main(){

    int N;
    cin >> N;

    for (int i = 2; i < N; i++){
        for (int j = 2; j < N; j++){

            if (i%j == 0){
                break;

            }
            else
                cout << i << " " << "is a prime number\n";
        }       
    }
}

2 个答案:

答案 0 :(得分:1)

每当j没有划分i时,您就会打印出i为素数。你应该等到你检查所有可能的除数。我不会给你答案你应该做什么,但它应该涉及修改你的代码的这一部分:

if (i%j == 0){
break;

}
else
cout << i << " " << "is a prime number\n";
}       

答案 1 :(得分:0)

代码中的错误:

  1. 您必须先检查所有可能的值,然后才能说出它的最佳状态。因此,您需要使用一个标志来确定循环中是否有任何值划分为 i
  2. 您必须继续第二个循环,直到i而不是N
  3. <强>优化

    1. 只需检查sqrt(Number)以检查其是否为素数而不是数字-1。

      #include <iostream>
      using namespace std;
      // this program will calculate the first N primes
      
      
      int main(){
      
          int N;
          cin >> N;
      
          for (int i = 2; i < N; i++){
              int f=0;
              for (int j = 2; j*j <= (i); j++){
      
                  if (i%j == 0){
                      f=1;
                      break;
      
                  }
      
              }
              if(!f) Cout<<i<<"is prime"<<endl;       
          }
      }
      
相关问题