Count prime

埃拉托斯特尼筛法

wiki: http://zh.wikipedia.org/wiki/%E5%9F%83%E6%8B%89%E6%89%98%E6%96%AF%E7%89%B9%E5%B0%BC%E7%AD%9B%E6%B3%95

步驟[编辑]

详细列出算法如下:

  1. 列出2以後的所有序列:

    • 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
  2. 标出序列中的第一个素数,也就是2,序列变成:
    • 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
  3. 将剩下序列中,劃摽2的倍数(用红色标出),序列变成:
    • 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
  4. 如果现在这个序列中最大数小于最後一個標出的素數的平方,那么剩下的序列中所有的数都是素数,否则回到第二步。

  1. 本例中,因为25大于2的平方,我们返回第二步:
  2. 剩下的序列中第一个素数是3,将主序列中3的倍数划出(红色),主序列变成:
    • 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
  1. 我们得到的素数有:2,3
  2. 25仍然大于3的平方,所以我们还要返回第二步:
  3. 现在序列中第一个素数是5,同样将序列中5的倍数划出,主序列成了:
    • 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
  4. 我们得到的素数有:2 3 5 。
  5. 因为25等于5的平方,跳出循环.

结论:去掉红色的数字,2到25之间的素数是:2 3 5 7 11 13 17 19 23。

时间: 2024-11-11 17:17:34

Count prime的相关文章

解题报告 之 HOJ2276 SOJ2498 Count prime

解题报告 之 HOJ2276 SOJ2498 Count prime Description Given an integer interval [L, R](L <= R <= 2147483647, R - L <= 1000000), please calculate the number of prime(s) in the interval. Input There is one line in the input, which contains two integer: L,

Leetcode Count Prime

Description: Count the number of prime numbers less than a non-negative number, n Hint: The number n could be in the order of 100,000 to 5,000,000. #define NO 0 #define YES 1 class Solution { public: int countPrimes(int n) { if(n == 1) return 0; int

LeetCode#203 Count Prime

Problem Definition: Remove all elements from a linked list of integers that have value val. Example Given: 1 --> 2 --> 6 --> 3 --> 4 --> 5 --> 6, val = 6 Return: 1 --> 2 --> 3 --> 4 --> 5 Solution: 构造一个头节点 def removeElements(

[LeetCode]Count Primes

题目:Count Primes 统计1-n的素数的个数. 思路1: 通常的思想就是遍历(0,n)范围内的所有数,对每个数i再遍历(0,sqrt(i)),每个除一遍来判断是否为素数,这样时间复杂度为O(n*sqrt(n)). 具体实现不在贴代码,过程很简单,两重循环就可以解决.但是效率很差,n较大时甚至会花几分钟才能跑完. 思路2: 用埃拉特斯特尼筛法的方法来求素数,时间复杂度可以达到O(nloglogn). 首先开一个大小为n的数组prime[],从2开始循环,找到一个质数后开始筛选出所有非素数

Count Primes leetcode

Description: Count the number of prime numbers less than a non-negative number, n. Credits:Special thanks to @mithmatt for adding this problem and creating all test cases. 埃拉托斯特尼筛法 要得到自然数n以内的全部素数,必须把不大于  的所有素数的倍数剔除,剩下的就是素数. 给出要筛数值的范围n,找出以内的素数.先用2去筛,即

[LeetCode][JavaScript]Count Primes

Count Prime Description: Count the number of prime numbers less than a non-negative number, n. https://leetcode.com/problems/count-primes/ 找出所有小于n的数中的质数. 删数法.开一个1到n的数组,删除所有2的倍数,3的倍数...直到√n的倍数,最后剩下的就是质数. 1 /** 2 * @param {number} n 3 * @return {number

2015.07.15——prime素数

prime素数 1.素数也叫质数,定义是一个数只能被1和它自身整除. 素数从2开始,0,1都不是素数. 2.素数的判断(C++) 3.给定某个数,求小于这个数的所有素数 2.素数的判断(C++) 1 bool IsPrimer(int n) 2 { 3 int m=sqrt(n); 4 for(int i=2;i<=m;i++) //只看从0-sqrt(n) 5 { 6 if(n%i==0) return false; //被1,n之外的数整除 7 } 8 return true; 9 } 不需

最一般的筛素数法

1 int countPrimes(int n) { 2 vector<bool> prime(n,true); 3 prime[1]=prime[0]=false; 4 for(int i=3;i<n;i++) 5 if(i%2==0) 6 prime[i]=false; 7 8 for(int i=3;i<sqrt(n);i++) 9 if(prime[i]) 10 for(int j=i*i;j<n;j+=i) 11 prime[j]=false; 12 13 retu

java 经典算法(转)

1.河内之塔.. 2.Algorithm Gossip: 费式数列. 3. 巴斯卡三角形 4.Algorithm Gossip: 三色棋 5.Algorithm Gossip: 老鼠走迷官(一) 6.Algorithm Gossip: 老鼠走迷官(二) 7.Algorithm Gossip: 骑士走棋盘 8.Algorithm Gossip: 八皇后 9.Algorithm Gossip: 八枚银币. 10.Algorithm Gossip: 生命游戏. 11.Algorithm Gossip: