作业帮 > 综合 > 作业

C++(数组)质数统计

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/27 02:23:06
C++(数组)质数统计
在自然数 2 n 中,有多少个质数(素数).

输入文件:
一个数 n ( 10 ≤ n ≤ 10000000 )
输出文件:
一个数,表示 2 n 中的质数个数

输入样例:
20
输出样例:
8

样例说明:
20 以内质数 2 3 5 7 11 13 17 19 共 8 个.

//这是线性筛,O(n)的
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<set>
#include<algorithm>
#include<map>
#include<vector>
#include<queue>
#include<iostream>
#include<string>
#include<cmath>
#define N 10000000
#define FOR(i,a,b) for(i=(a);i<=(b);i++)
#define ROF(i,a,b) for(i=(a);i>=(b);i--)
typedef long long LL;
using namespace std;
bool f[N+10];int sum[N+10],prime[N+10],len=0;
void initprime()
{
  int i,j;
  FOR(i,2,N)
  {
    if (!f[i]) prime[++len]=i;
    FOR(j,1,len) 
    {
      if (i*prime[j]>N) break;
      f[i*prime[j]]=1;
      if (i%prime[j]==0) break;
    }
  }
  sum[1]=0;
  FOR(i,2,N) sum[i]=sum[i-1]+1-f[i];
}
int main()
{
  initprime();
  int n;scanf("%d",&n);
  printf("%d\n",sum[n]);
}
再问: 你用的是C,用C++才行
再答: 你认不认识语言啊,这不是C++是什么?