文章目录

  • 目的
  • 1. 普通方法
  • 2. 普通方法优化
  • 3. 埃拉托斯特尼筛法普通版
  • 4. 埃拉托斯特尼筛法改进版

埃拉托斯特尼筛法

目的

求解1到n之间素数的个数

1. 普通方法

很质朴地遍历,然后判断每个数是否是质数
时间复杂度:O(n2){O(n^2)}O(n2)

class Solution {public static int countPrimes(int n) {if(n<2)return 0;int ret = 0;for (int i = 2; i <n ; i++) {if(isPrime(i))ret++;}return ret;}private static boolean isPrime(int n) {for (int i = 2; i<n ; i++) {if(n%i==0)return false;}return true;}
}

2. 普通方法优化

isPrime()方法可以优化到O(sqrt(n)){O(sqrt(n))}O(sqrt(n))
时间复杂度:O(n×sqrt(n)){O(n\times sqrt(n))}O(n×sqrt(n))

class Solution {public static int countPrimes(int n) {if(n<2)return 0;int ret = 0;for (int i = 2; i <n ; i++) {if(isPrime(i))ret++;}return ret;}private static boolean isPrime(int n) {for (int i = 2; i*i<=n ; i++) {if(n%i==0)return false;}return true;}
}

3. 埃拉托斯特尼筛法普通版

思路就是我们得到一个质数K后,所有K的倍数的数都不是质数

class Solution {public static int countPrimes(int n) {if(n<2)return 0;boolean[] dp = new boolean[n];Arrays.fill(dp, true);for (int i = 2; i <n ; i++) {if(!dp[i])continue;int j = i*2;while (j < n) {dp[j]= false;j+=i;}}int count = 0;for (boolean item : dp) {if(item)count++;}// 减去0和1return count-2;}
}

4. 埃拉托斯特尼筛法改进版

  1. 在上一段代码中,int j = i*2这里我们可以改成int j = i*i
  2. 外层的循环也可以改成for(int i = 2;i*i<n;i++)
  3. 省略dp数组的初始数据填充(Arrays.fill),最后取反即可
class Solution {public static int countPrimes(int n) {if(n<2)return 0;boolean[] dp = new boolean[n];for (int i = 2; i*i <n ; i++) {if(dp[i])continue;int j = i*i;while (j < n) {dp[j]= true;j+=i;}}int count = 0;for (boolean item : dp) {if(!item)count++;}return count-2;}
}

sieve of Eratosthenes相关推荐

  1. Sieve of Eratosthenes(埃拉托色尼筛选法)——C++实现

    采用vs2010编译. //findPrimeNumber.h #pragma once#include <iostream> #include <vector>using n ...

  2. Sieve of Eratosthenes solution

    Sieve of Eratosthenes solution 方法1: Sieve of Eratosthenes solution Complexity Count the number of pr ...

  3. [原]素数筛法【Sieve Of Eratosthenes + Sieve Of Euler】

    拖了有段时间,今天来总结下两个常用的素数筛法: 1.sieve of Eratosthenes[埃氏筛法] 这是最简单朴素的素数筛法了,根据wikipedia,时间复杂度为 ,空间复杂度为O(n). ...

  4. Python:实现 sieve of Eratosthenes埃拉托色尼筛法算法(附完整源码)

    Python:实现 sieve of Eratosthenes埃拉托色尼筛法算法 from __future__ import annotationsimport mathdef prime_siev ...

  5. 筛法(Sieve of Eratosthenes)

    Sieve of Eratosthenes 筛法 百度百科 在数学中,Eratosthenes 筛法是一种古老的算法,用于查找任何给定限制内的所有素数. package mainimport &quo ...

  6. 质数相关的算法 --Sieve of Eratosthenes算法 (埃拉托斯特尼)

    质数相关的算法 --Sieve of Eratosthenes算法 (埃拉托斯特尼) 质数的定义 相关的算法(问题为求小于整数n的所有质数的数量) 暴力求解 Sieve of Eratosthenes ...

  7. 质数筛选算法:The Sieve of Eratosthenes

    质数 质数(prime number)也叫素数,为大于1的且除1和本身以外不再有其他因数的自然数,与之相对的是合数.质数有无限个. 性质 ·质数只有两个因数:1和本身 ·任何大于1的自然数,要么本身是 ...

  8. Sieve of Eratosthenes质数

    介绍 Eratosthenes的质数筛选法是一个简单的质数筛选法,它在给定的有限的集合当中找出所有的质数.它会从2开始迭代的标记出所有的非质数,而剩下的则就是质数了. 如上图所示,这是一个查找120以 ...

  9. Compute the Greatest Common Divisor of Two Integers using Sieve of Eratosthenes.

    用埃拉托色尼筛选法计算两个整数的最大公约数 最近在回顾算法,会相继贴一些自己写的代码,希望在分享的同时,能够得到观看者的指教,以求共同进步. 以下为我写的程序,运行环境:Dev-C++ 5.4.0. ...

  10. 找质数算法之埃拉托色尼筛选法(Sieve of Eratosthenes算法)

    一.算法原理 一个合数总是可以分解成若干个质数的乘积,那么如果把质数(最初只知道2是质数)的倍数都去掉,那么剩下的就是质数了. 二.步骤 (1)先把1删除(1既不是质数也不是合数) (2)读取队列中当 ...

最新文章

  1. Broadcast源码分析
  2. 扩增子分析流程QIIME. 1 使用Docker配置QIIME
  3. HTTP 头部解释,HTTP 头部详细分析,最全HTTP头部信息
  4. Mule ESB,ActiveMQ和DLQ
  5. DynamipsGUI下CISCO SDM的安装配置
  6. Springboot整合zookeeper
  7. 算法竞赛入门经典 电子书(附习题解析)网盘下载
  8. 汉语言文学如何利用计算机思维,计算机在应用于汉语言文学时产生的优势与局限.PDF...
  9. 为什么要选择平台+独立站运营的双轨模式
  10. 互斥事件的概念和公式_相互独立事件与互斥事件的区别
  11. java学习之htlm总结
  12. Unity Shader - Shader Compilation Target Levels 着色器编译目标级别
  13. wpa.b.qq.com/cgi/wpa.php,营销QQ在线客服代码生成的方法(支持手机和PC)
  14. win10安装wsl步骤
  15. javascript event click/dblclick left/right区分左键、右键、双击事件,排除点击事件与拖拽事件冲突,做防抖优化
  16. 网络:以太网交换机、路由器
  17. @Cacheable使用详解
  18. 电子科技大学格拉斯哥学院基础实践——共享单车的调查
  19. sv_labs学习笔记——sv_lab1(System Verilog)
  20. mysql 加上天数_MySQL Datetime添加天数?

热门文章

  1. linux的gets函数,linux中gets()函数和fgets()函数
  2. 【HDU4741】空间解析几何
  3. 现行〖金融帝国实验室〗(Capitalism Lab)官方正版游戏『销售政策指引』(2022.02.01~02.28)
  4. 小学计算机教师资格证笔试试题,2019上半年小学信息技术教师资格证面试试题(精选)第一批...
  5. 淘宝运营 怎样找到竞争对手 怎样分析竞品
  6. mysql python插件_基于SQLAlchemy连接mysql库(pymsql插件)
  7. HTML学习笔记--第一天
  8. python 根据PDF 目录生成PDF书签
  9. Oracle VM VirtualBox--USB功能扩展安装
  10. Arduino 串口数据接收并打印输出int类型数据