-5

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

例子:

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

3 回答 3

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;

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

于 2013-07-23T04:21:12.670 回答
1

尝试这个,

#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;
}
于 2013-07-23T04:27:13.290 回答
0

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

于 2013-07-23T04:24:18.827 回答