给你一个数n,请问n以内有多少个素数?(n <= 10e7)

一般来说,要是对一个整数进行素数判断,首先想到的是写个函数判断是否为素数,然后调用这个函数,时间复杂度为O(n^(½)),但是要求n以内的素数就略显吃力了.

要是求n以内的素数个数的话,可以用埃式筛选.预处理一下.

先看下面的代码:

 /*
|埃式筛法|
|快速筛选素数|
    |15-7-26|
*/
#include <iostream>
#include <cstdio>
using namespace std;
const int SIZE = 1e7; int prime[SIZE]; // 第i个素数
bool is_prime[SIZE]; //true表示i是素数 int slove(int n)
{
int p = ;
for(int i = ; i <= n; i++)
is_prime[i] = true; //初始化
is_prime[] = is_prime[] = false; //0,1不是素数
for(int i = ; i <= n; i++)
{
if(is_prime[i]) //这里比较巧妙, 我只是意会
{
prime[p++] = i; //计算素数的个数,也记录下了素数
for(int j = * i; j <= n; j += i) // 除掉了i的倍数的数字
is_prime[j] = false;
}
}
return p;
} int main()
{
int n;
while(cin >> n)
{
int res = slove(n);
cout << res << endl;
for(int i = ; i < res; i++)
cout << prime[i] << endl;
}
}
2 3 4 5 6 7 8 9 10 11 12
2 3 - 5 - 7 - 9 - 11 -
2 3 - 5 - 7 - - - 11 -

结合这张表看看,慢慢一次次的都筛选完了..

其中最小的素数是2,将表中所有2的倍数都除去,剩下最小的数是3,不能被更小的数整除,所以是素数.再将表中3的倍数的数除去.以此类推.如果表中最小的数字是m,m就是素数.然后将表中所有m的倍数都除去...然后就可以了= =

话说要是求区间[x,y]内求素数个数的话,只要0~y的素数个数-0~x的素数个数就可以了,然后判断x是否为素数就可以了...

埃氏筛法(快速筛选n以内素数的个数)的更多相关文章

  1. 埃氏筛法(求n以内有多少个素数)

    题目大意:给定整数n,请问n以内有多少个素数 思路:想必要判断一个数是否是素数,大家都会了,并且可以在O(根号n)的复杂度求出答案,那么求n以内的素数呢,那样求就显得有点复杂了,下面看一下这里介绍的

  2. 素数判断-----埃氏筛法&欧拉筛法

    埃氏筛法 /* |埃式筛法| |快速筛选素数| |15-7-26| */ #include <iostream> #include <cstdio> using namespa ...

  3. poj 2689Prime Distance(区间素数)埃氏筛法

    这道题的L和R都很大,所以如果直接开一个1~R的数组明显会超时.但是R-L并不大,所以我们考虑把这个区间(L--R)移动到(1--(R-L+1))这个区间再开数组(就是把每个数减L再加1).接下来先用 ...

  4. 埃氏筛法求素数&构造素数表求素数

    埃氏筛法求素数和构造素数表求素数是一个道理. 首先,列出从2开始的所有自然数,构造一个序列: 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 1 ...

  5. [算法]素数筛法(埃氏筛法&线性筛法)

    目录 一.素数筛的定义 二.埃氏筛法(Eratosthenes筛法) 三.线性筛法 四.一个性质 一.素数筛的定义 给定一个整数n,求出[1,n]之间的所有质数(素数),这样的问题为素数筛(素数的筛选 ...

  6. GDUFE-OJ 1359校庆素数 埃氏筛法

    Problem Description: 包含33的素数称为校庆素数. 她想知道在L和R之间(包含L和R)有多少个校庆素数. 比如 2333 就是一个校庆素数. Input: 输入的第一行包括一个T( ...

  7. Codeforces Round #270 A. Design Tutorial: Learn from Math【数论/埃氏筛法】

    time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...

  8. DP+埃氏筛法 Codeforces Round #304 (Div. 2) D. Soldier and Number Game

    题目传送门 /* 题意:b+1,b+2,...,a 所有数的素数个数和 DP+埃氏筛法:dp[i] 记录i的素数个数和,若i是素数,则为1:否则它可以从一个数乘以素数递推过来 最后改为i之前所有素数个 ...

  9. 埃氏筛法(求n以内有哪些个质数)

    核心思想:从i=2开始,划去i的倍数,即剩下i为质数(如删去2的倍数后2为质数,再删去3的倍数后3为质数,4被删除则跳过,5未被删除则记录然后删除5的倍数...以此类推) #include <b ...

随机推荐

  1. UVALive 4043 Ants 蚂蚁(二分图最佳完美匹配,KM算法)

    题意: 有n个蚂蚁n棵树,蚂蚁与树要配对,在配对成功的一对之间连一条线段,要求所有线段不能相交.按顺序输出蚂蚁所匹配的树. 思路: 这个题目真是技巧啊,不能用贪心来为每个蚂蚁选择最近的树,这样很可能是 ...

  2. Linux技巧:一次删除一百万个文件最快方法

    昨天,我看到一个非常有趣的删除一个目录下的海量文件的方法.这个方法来自http://www.quora.com/How-can-someone-rapidly-delete-400-000-files ...

  3. Oracle 11g RAC oc4j/gsd Offline

    Oracle 11g RAC中,发现oc4j以及gsd服务都处于offline状态,这是Oracle 11g RAC默认情形.即便如此,并不影响数据库的使用,因为 oc4j 是用于WLM 的一个资源, ...

  4. crontab 每月最后一天

    0 8 28-31 * * [ `date -d tomorrow +%e` -eq 1 ] && do-something   我觉得能想到这种方法的,都是经验丰富的人.程序员们,想 ...

  5. hdu 5423 Rikka with Tree(dfs)bestcoder #53 div2 1002

    题意: 输入一棵树,判断这棵树在以节点1为根节点时,是否是一棵特殊的树. 相关定义: 1.  定义f[A, i]为树A上节点i到节点1的距离,父节点与子节点之间的距离为1. 2.  对于树A与树B,如 ...

  6. Twitter Storm如何保证消息不丢失

    storm保证从spout发出的每个tuple都会被完全处理.这篇文章介绍storm是怎么做到这个保证的,以及我们使用者怎么做才能充分利用storm的可靠性特点. 一个tuple被”完全处理”是什么意 ...

  7. RESTful HTTP的实践

    REST是一种风格,而不是标准.因为既没有REST RFC,也没有REST协议规范或者类似的规定.REST架构是Roy Fielding(他也是HTTP和URI规范的主要作者之一)在一篇论文中描述的. ...

  8. 又一枚神器:nginx

    一直听说过nginx的大名,也自己装过,但是未直接使用其各种牛X的功能. 今天试用了一下,只能用两字感叹:牛逼!比如它提供的配置检查功能,真是贴心极了,又比如我想要的静态内容浏览器端缓存功能,动态内容 ...

  9. 猎豹使用AI RoboForm填表

    最近,Chrome同步书签好慢,另外因为工作的原因,chrome还是用来做工作的事情,自己的事情准备换到猎豹,但是一个重要的问题是强大的自动填表工具AI RoboForm没有整合到猎豹的地方: 搜索了 ...

  10. ctype库试运行

    from ctypes import * msvcrt=cdll.msvcrt message_string="Hello world!\n" msvcrt.wprintf(&qu ...