题目描述
给定一个正整数N,求出1到N中有多少个素数
输入
输入一行一个正整数
输出
输出一行一个整数,表示1到N中有多少个素数
样例输入
10
样例输出
4
提示
【数据范围】
对于30%的数据 N<=100
对于70%的数据 N<=5000
对于100%的数据 N<=10 000 000
题解:
这题的n太大,用平常的方法会tle,所以只好用欧拉线性筛
#include<bits/stdc++.h>
#define ll long long
const int MAXN = 10000005;//数组要开大
using namespace std;
int prime[MAXN] = {0}//记录素数i,vis[MAXN]//记录i是否是素数;
ll n;
void check_prime(int cnt)//欧拉线性筛
{
for(int i = 2;i <= n; ++i)
{
if(vis[i] == false) prime[cnt++] = i;//如果i是素数,记录到prime数组中
for(int j = 0;j <= cnt && i * prime[j] <= n; ++j)//筛数环节
{
vis[i * pri