用C ++计算素数

时间:2013-07-23 04:12:38

标签: c++ primes

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

示例:

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

3 个答案:

答案 0 :(得分:2)

重新格式化代码:

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

虽然这绝对看起来像你的作业,但我希望你从中学到一些东西。

答案 1 :(得分:0)

简单,只需增加一个计数器而不是打印该值。您还可以使用等式N /(log(N)-1)获得相当不错的欧拉函数逼近...

答案 2 :(得分: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;
}