sieve of Eratosthenes
文章目录
- 目的
- 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. 埃拉托斯特尼筛法改进版
- 在上一段代码中,
int j = i*2
这里我们可以改成int j = i*i
- 外层的循环也可以改成
for(int i = 2;i*i<n;i++)
- 省略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相关推荐
- Sieve of Eratosthenes(埃拉托色尼筛选法)——C++实现
采用vs2010编译. //findPrimeNumber.h #pragma once#include <iostream> #include <vector>using n ...
- Sieve of Eratosthenes solution
Sieve of Eratosthenes solution 方法1: Sieve of Eratosthenes solution Complexity Count the number of pr ...
- [原]素数筛法【Sieve Of Eratosthenes + Sieve Of Euler】
拖了有段时间,今天来总结下两个常用的素数筛法: 1.sieve of Eratosthenes[埃氏筛法] 这是最简单朴素的素数筛法了,根据wikipedia,时间复杂度为 ,空间复杂度为O(n). ...
- Python:实现 sieve of Eratosthenes埃拉托色尼筛法算法(附完整源码)
Python:实现 sieve of Eratosthenes埃拉托色尼筛法算法 from __future__ import annotationsimport mathdef prime_siev ...
- 筛法(Sieve of Eratosthenes)
Sieve of Eratosthenes 筛法 百度百科 在数学中,Eratosthenes 筛法是一种古老的算法,用于查找任何给定限制内的所有素数. package mainimport &quo ...
- 质数相关的算法 --Sieve of Eratosthenes算法 (埃拉托斯特尼)
质数相关的算法 --Sieve of Eratosthenes算法 (埃拉托斯特尼) 质数的定义 相关的算法(问题为求小于整数n的所有质数的数量) 暴力求解 Sieve of Eratosthenes ...
- 质数筛选算法:The Sieve of Eratosthenes
质数 质数(prime number)也叫素数,为大于1的且除1和本身以外不再有其他因数的自然数,与之相对的是合数.质数有无限个. 性质 ·质数只有两个因数:1和本身 ·任何大于1的自然数,要么本身是 ...
- Sieve of Eratosthenes质数
介绍 Eratosthenes的质数筛选法是一个简单的质数筛选法,它在给定的有限的集合当中找出所有的质数.它会从2开始迭代的标记出所有的非质数,而剩下的则就是质数了. 如上图所示,这是一个查找120以 ...
- Compute the Greatest Common Divisor of Two Integers using Sieve of Eratosthenes.
用埃拉托色尼筛选法计算两个整数的最大公约数 最近在回顾算法,会相继贴一些自己写的代码,希望在分享的同时,能够得到观看者的指教,以求共同进步. 以下为我写的程序,运行环境:Dev-C++ 5.4.0. ...
- 找质数算法之埃拉托色尼筛选法(Sieve of Eratosthenes算法)
一.算法原理 一个合数总是可以分解成若干个质数的乘积,那么如果把质数(最初只知道2是质数)的倍数都去掉,那么剩下的就是质数了. 二.步骤 (1)先把1删除(1既不是质数也不是合数) (2)读取队列中当 ...
最新文章
- Broadcast源码分析
- 扩增子分析流程QIIME. 1 使用Docker配置QIIME
- HTTP 头部解释,HTTP 头部详细分析,最全HTTP头部信息
- Mule ESB,ActiveMQ和DLQ
- DynamipsGUI下CISCO SDM的安装配置
- Springboot整合zookeeper
- 算法竞赛入门经典 电子书(附习题解析)网盘下载
- 汉语言文学如何利用计算机思维,计算机在应用于汉语言文学时产生的优势与局限.PDF...
- 为什么要选择平台+独立站运营的双轨模式
- 互斥事件的概念和公式_相互独立事件与互斥事件的区别
- java学习之htlm总结
- Unity Shader - Shader Compilation Target Levels 着色器编译目标级别
- wpa.b.qq.com/cgi/wpa.php,营销QQ在线客服代码生成的方法(支持手机和PC)
- win10安装wsl步骤
- javascript event click/dblclick left/right区分左键、右键、双击事件,排除点击事件与拖拽事件冲突,做防抖优化
- 网络:以太网交换机、路由器
- @Cacheable使用详解
- 电子科技大学格拉斯哥学院基础实践——共享单车的调查
- sv_labs学习笔记——sv_lab1(System Verilog)
- mysql 加上天数_MySQL Datetime添加天数?
热门文章
- linux的gets函数,linux中gets()函数和fgets()函数
- 【HDU4741】空间解析几何
- 现行〖金融帝国实验室〗(Capitalism Lab)官方正版游戏『销售政策指引』(2022.02.01~02.28)
- 小学计算机教师资格证笔试试题,2019上半年小学信息技术教师资格证面试试题(精选)第一批...
- 淘宝运营 怎样找到竞争对手 怎样分析竞品
- mysql python插件_基于SQLAlchemy连接mysql库(pymsql插件)
- HTML学习笔记--第一天
- python 根据PDF 目录生成PDF书签
- Oracle VM VirtualBox--USB功能扩展安装
- Arduino 串口数据接收并打印输出int类型数据