筛素数

来源:互联网 发布:淘宝装修助手 编辑:程序博客网 时间:2024/06/09 17:39

#include<iostream>#include<cstdio>#include<cmath>#include<cstring>using namespace std;#define N 10000009bool vis[N];int num[N];void init(){    int m=sqrt(N+0.5);    memset(vis,false,sizeof(vis));    memset(num,0,sizeof(num));    for(int i=2;i<=m;i++)    {        if(!vis[i])        {            for(int j=i*i;j<=N;j+=i)            {                vis[j]=true;            }        }    }    for(int i=2;i<=N;i++)    {        if(!vis[i])        {            num[i]=num[i-1]+1;        }        else            num[i]=num[i-1];    }}int main(){#ifdef CDZSC    freopen("i.txt","r",stdin);#endif    init();    int t,n;    scanf("%d",&t);    while(t--)    {        scanf("%d",&n);        printf("%d\n",num[n]);    }    return 0;}

是时候开始来一波数学了~\(≧▽≦)/~,开始数学专题。这一题就是直接上筛素数模板。


这是模板:

bool vis[N]; void prime_table(int n){int m = sqrt(n + 0.5);memset(vis, false, sizeof(vis));for (int i = 2; i <= m; i++){if (!vis[i]){for (int j = i*i; j <= n; j += i){vis[j] = true;}}}}






1133: 又见素数

Time Limit: 2 Sec  Memory Limit: 64 MB
Submit: 1370  Solved: 101
[Submit][Status][Web Board]

Description

给定一个正整数n(n <= 10000000),求n(包含)以内素数的个数。

Input

第一行为一个整数t(t <= 1000),表示测试数据的组数。 接下来有t行,每行一个整数n。

Output

对于每个n,求n以内素数的个数。

Sample Input

2510

Sample Output

34

HINT

Source


0 0