筛法求素数
时间:2022-07-25
本文章向大家介绍筛法求素数,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
给定N,求解1 ~ N的所有素数。
一般做法为依次判断2 ~ N是否为偶数,其时间复杂度为O(N ^ 2)
筛法大体思路:
根据素数定义可知,若某个数能被其他素数整除,则其一定不为素数,因此可以依次筛掉1 ~ N中不是素数的数,剩下的即为所求。
public List<Integer> getPrime(int N){
boolean[] nonPrime = new boolean[N + 1];
List<Integer> ans = new ArrayList<>();
for(int i = 2; i <= N; i++) {
if(nonPrime[i]) {
continue;
}
ans.add(i);
for(int j = i; j * i <= N; j++) {
nonPrime[i * j] = true;
}
}
return ans;
}
筛法求素数过程中,我们发现对于每个元素,最多被访问2次。因此其时间复杂度为O(N),由于使用了额外boolean[] nonPrime,因此额外空间复杂度亦为O(N)。
一个应用:孪生素数的求解
孪生素数定义:间隔为2的两个素数。(例如 (3, 5),(5, 7),(11, 13))
求解小于N的孪生素数的对数。
public int countTwicePrime(int N) {
boolean[] nonPrime = new boolean[N + 1];
int count = 0;
int prePrime = 2;
for(int i = 2; i <= N; i++) {
if(nonPrime[i]) {
continue;
}
if(i - prePrime == 2) {
count++;
}
prePrime = i;
for(int j = i; j * i <= N; j++) {
nonPrime[i * j] = true;
}
}
return count;
}
- React第三方组件2(状态管理之Refast的使用⑤LogicRender使用)
- 左右用R右手Python9——字符串合并与拆分
- hdu 1003 Max Sum(最大子窜和)
- React第三方组件2(状态管理之Refast的使用④中间件middleware使用)
- 高维分面应用——ggplot2分面气泡图饼图
- poj 1579 Function Run Fun
- React第三方组件2(状态管理之Refast的使用③扩展ctx)
- 财经小知识——CRS风暴与全球离岸金融中心
- The Triangle
- React第三方组件2(状态管理之Refast的使用②异步修改state)
- UVa Automatic Editing
- React第三方组件2(状态管理之Refast的使用①简单使用)
- uva Excuses, Excuses!
- React第三方组件5(状态管理之Redux的使用④TodoList下)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 机器学习还能预测心血管疾病?没错,我用Python写出来了
- Fasttext 总结
- PathClassLoader加载与查找类
- springboot maven项目引入并打包本地JAR
- 移植lua5.2和luasocket库到嵌入式linux,使能强大的lua脚本和网络功能
- Go或者C中调用Lua业务脚本,实现终端应用的热更新机制
- 多线程基础(八):ReentrantLock的使用及与synchronized的区别
- 在java中notify和notifyAll的区别
- 我在近期求职中遇到的前端面试问题及其解法
- 腾讯云 云开发 部署 Blazor网站
- 最新基准测试:Kafka、Pulsar 和 RabbitMQ 哪个最快?
- 基于飞桨实现高光谱反演:通过遥感数据获取土壤某物质含量
- 飞桨Tracking目标跟踪库开源!涵盖业界主流的VOT算法,精准检测动态目标轨迹
- 基于react的组件库主题设计方案
- Xilinx MPSoC PS/PL之间的数据交互和外设设计