Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 计算素数C++;_C++_Visual C++ - Fatal编程技术网

C++ 计算素数C++;

C++ 计算素数C++;,c++,visual-c++,C++,Visual C++,我正在努力学习如何编写代码,我在努力学习代码的错误之处。我在Visual Studio 2013中用C++编程。 问题:编写一个程序从用户处读取数字N,然后查找前N个素数。素数是一个只有两个除数的数,一个和它本身 我的代码不是打印素数序列,而是重复一些素数 #include <iostream> using namespace std; // this program will calculate the first N primes int main(){ int N

我正在努力学习如何编写代码,我在努力学习代码的错误之处。我在Visual Studio 2013中用C++编程。 问题:编写一个程序从用户处读取数字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";
        }       
    }
}
#包括
使用名称空间std;
//此程序将计算前N个素数
int main(){
int N;
cin>>N;
for(int i=2;icout无论何时
j
不除法
i
,您都会打印出
i
是素数。您应该等到检查了所有可能的除数后再打印。我不会给出您应该做什么的答案,但它应该包括修改代码的这一部分:

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

}
else
cout << i << " " << "is a prime number\n";
}       
if(i%j==0){
打破
}
其他的

您的代码中有错误:

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

  • 它只需要检查直到
    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;       
        }
    }
    
    #包括
    使用名称空间std;
    //此程序将计算前N个素数
    int main(){
    int N;
    cin>>N;
    for(int i=2;i对于(int j=2;j*j这不是一个编程问题,这是一个数学问题,也就是说,你的错误不在你的代码中,而是你对如何确定一个数字是否为素数缺乏理解。看看你的想法。你也误读了这个问题——它希望你找到前N个素数,例如,如果N=3,那么你必须找到前3个素数N数字是2、3和5。你似乎在搜索2和N-1之间的素数。这只是问题的一部分。他也没有搜索前N个素数(而只是搜索2和N-1之间的素数)。