计算素数C++的循环误差可视化

visual for loop error calculating prime numbers C++

本文关键字:循环 误差 可视化 C++ 计算      更新时间:2023-10-16

我正在努力学习如何编写代码,但我在努力了解我的代码有什么问题的同时也在苦苦挣扎。我正在使用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 numbern";
        }       
    }
}

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

if (i%j == 0){
break;
}
else
cout << i << " " << "is a prime numbern";
}       

代码中的错误:

  1. 在说出它的素数之前,你必须检查所有可能的值。因此,您需要使用一个标志来确定循环中是否有任何值除以i
  2. 您必须继续第二个循环,直到i而不是N

优化

  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;       
        }
    }