当前位置: 首页 > news >正文

总结一下找素数的三种方法

目录

一试除法

二埃氏筛

三线性筛(欧拉筛)


一试除法

思想:就是判断某个数x是不是素数,就判断从2开始到小于=根号x的范围内有没有能够取余不等于0的,这个说明当前值就是x的一个因子,所以不是素数。

代码:

import java.util.Scanner;public class Javava {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("求0~300之间的素数:");pan1();//试除法sc.close();}private static void pan1() {int total = 0;for (int i = 2; i <= 300; i++) {int j;for( j = 2; j*j <= i; j++) {if(i%j==0){break;}}if(j*j>i){System.out.println(i+" ");total ++;}}System.out.println("共有"+total+"个");}
}

二埃氏筛

思想:从小到大开始判断素数,当前x是素数,那么x*x 及以后得x*x+n*x都不在会是素数了,直接排除即可,使用一个boolean型的辅助数组即可

代码:

import java.util.Scanner;public class Javava {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("求0~300之间的素数:");pan2();//埃氏筛sc.close();}private static void pan2() {int total = 0;boolean [] arr = new boolean[300];for (int i = 2; i < arr.length; i++) {if(arr[i]==false){for(int j=i*i;j<arr.length;j+=i){arr[j]=true;}}}System.out.println("素数有");for (int i = 2; i < arr.length; i++) {if(arr[i]==false){System.out.print(i+" ");total++;}}System.out.println();System.out.println("共有"+total+"个");}
}

三线性筛(欧拉筛)

思想:因为第二个埃氏筛有重复标记的,也是浪费性能,线性筛是对埃氏筛的进一步优化

代码:

ArrayList

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;public class Javava {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("求0~300之间的素数:");pan3();//欧拉筛sc.close();}private static void pan3() {int total = 0;boolean [] arr = new boolean[301];ArrayList<Integer> list = new ArrayList<>();for (int i = 2; i < arr.length; i++) {if(arr[i]==false)list.add(i);for(int j=0;j<list.size()&&i*list.get(j)<=300;j++){arr[i*list.get(j)]=true;if(i%list.get(j)==0){break;}}}System.out.println("素数有");for(int val:list){System.out.print(val+" ");}System.out.println();System.out.println("共有"+list.size()+"个");}
}

二:纯粹数组

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;public class Javava {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("求0~300之间的素数:");pan3();//欧拉筛sc.close();}private static void pan3() {int total = 0;boolean [] arr = new boolean[301];
//        ArrayList<Integer> list = new ArrayList<>();int [] list = new int[301];int idx = 0;for (int i = 2; i < arr.length; i++) {if(arr[i]==false)list[idx++] = i;for(int j=0;j<=idx&&i*list[j]<=300;j++){arr[i*list[j]]=true;if(i%list[j]==0){break;}}}System.out.println("素数有");for(int val:list){System.out.print(val+" ");}System.out.println();System.out.println("共有"+(idx)+"个");}
}

http://www.dtcms.com/a/279633.html

相关文章:

  • Python3完全新手小白的学习手册 13-1项目篇《外星人入侵》
  • MFC中BOOL类型,在某些操作系统中,-1不能被识别,一般是哪些原因?
  • MFC UI控件CheckBox从专家到小白
  • MFC UI表格制作从专家到入门
  • Cocos Creator 高斯模糊效果实现解析
  • 《星盘接口2:NVMe风暴》
  • C++_编程提升_temaplate模板_案例
  • ether.js—3—contract
  • 高密度PCB板生产厂商深度解析
  • Docker容器操作命令大全
  • C++-linux 7.文件IO(一)系统调用
  • 是时候重估蔚来的技术价值了
  • 【科研绘图系列】R语言绘制世界地图
  • python的小学课外综合管理系统
  • MMpretrain 中的 LinearClsHead 结构与优化
  • 分布式光伏并网中出现的电能质量问题,如何监测与治理?
  • 【数据库】慢SQL优化 - MYSQL
  • 系统调用入口机制:多架构对比理解(以 ARM64 为主)
  • MySQL高级篇(一):从存储引擎到索引优化实战
  • 人工智能正逐步商品化,而“理解力”才是开发者的真正超能力
  • 在数字工厂实施过程中,如何对计划、调度部门进行需求调研
  • 简单排序。
  • 1.连接MySQL数据库-demo
  • 基于Snoic的音频对口型数字人
  • OneCode 3.0 VFS客户端驱动(SDK)技术解析:从架构到实战
  • Kafka 时间轮深度解析:如何O(1)处理定时任务
  • 深度测评|2025年BPM厂商排名及选型指南
  • 设计模式》》门面模式 适配器模式 区别
  • 基于Android的
  • 数据可视化全流程设计指南