计算C++中的素数

Counting prime numbers in C++

本文关键字:C++ 计算      更新时间:2023-10-16

如何计算所有"素数"而不是显示它们?

示例:

cout << "there are 125 prime numbers";

我使用数字1000是因为我想知道它有多少素数。

我不想显示找到的素数,但我想知道找到了多少。

#include <iostream> 
#include <iomanip> 
#include <string>
#include <sstream> 
#include <fstream> 
#include <math.h> 
#include <stdio.h>
using namespace std;
int main()
{
    for (int a=2 ; a < 1000 ; a++)
    {
        bool prime = true;
        for(int c=2 ; c*c <= a ; c++)
        {
            if(a % c == 0)
            {
                prime = false;
                break;
            }
        }
        if(prime) cout << a << " ";
    }
    return 0;
}

重新格式化代码:

#include <iostream>
#include <iomanip>
#include <string>
#include <sstream>
#include <fstream>
#include <math.h>
#include <stdio.h>
using namespace std;
int main() {
    for (int a = 2; a < 1000; a++) {
        bool prime = true;
        for (int c = 2; c*c <= a; c++) {
             if(a % c == 0) {
                 prime = false;
                 break;
             }
         }
         if(prime) cout << a << " ";
    }
    return 0;
}

不是每次循环都打印出来,而是每次数字为素数时都需要制作一个变量来计数。首先在外部for循环之外添加一个变量:

int main() {
    int num_primes = 0;
    for (int a = 2; a < 1000; a++) {

接下来,不要在数字为素数时打印,只需增加计数器:

if(prime) {
    num_primes += 1;
}

最后,在从main()返回之前,打印出素数:

cout << num_primes << endl;
return 0;

虽然这看起来确实像你的家庭作业,但我希望你能从中学到一些东西。

试试这个,

#include < iostream>
#include < iomanip>
#include < string>
#include < sstream>
#include < fstream>
#include < math.h>
#include < stdio.h>
using namespace std;
int main()
{
    int count=0;
    for (int a=2 ; a < 1000 ; a++)
    {
        bool prime = true;
        for (int c=2 ; c*c <= a ; c++)
        {
            if(a % c == 0)
            {
                prime = false;
                break;
            }
         }
        if(prime) count++;
    }
    cout <<"No of prime numbers : "<< count;
    return 0;
}

简单,只需增加计数器而不是打印值。使用方程N/(log(N)-1),也可以得到一个相当不错的欧拉瞬变函数的近似。。。