首页 > 编程语言 >欧拉筛(线性筛)找素数(质数) - Java实现

欧拉筛(线性筛)找素数(质数) - Java实现

时间:2025-01-18 22:01:56浏览次数:3  
标签:notPrime Java pw 质数 素数 import pj new

欧拉筛(线性筛)找素数(质数) - Java实现


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.LinkedList;

public class Main {
    static int n = 0;
    static boolean[] notPrime = null;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        PrintWriter pw = new PrintWriter(System.out);
        String[] l1 = br.readLine().split(" ");
        n = Integer.parseInt(l1[0]);
        notPrime = new boolean[n+1];
        solution(pw);
        pw.flush();
        pw.close();
        br.close();
    }
    private static void solution(PrintWriter pw) {
        // 创建一个链表,用于存储素数
        LinkedList<Integer> prime = new LinkedList<>();
        // 遍历从2到n的所有数
        for (int i = 2; i <= n; i++) {
            // 如果当前数i没有被标记为非素数,则将其加入素数链表
            if (!notPrime[i]) {
                prime.add(i);
            }
            // 遍历已找到的素数
            for (Integer pj : prime) {
                // 如果i与pj的乘积超出了数组范围,则终止内层循环
                if (i * pj >= notPrime.length) {
                    break;
                }
                // 将i与pj的乘积标记为非素数
                notPrime[i * pj] = true;
                // 如果i能被pj整除,则终止内层循环
                // 这是因为此时i是pj的倍数,后续的i*pj'(pj'是pj之后的素数)都可以表示为pj的倍数的倍数
                // 例如,当i=6,pj=2时,在已找到的素数表中后续的其他素数与i的乘积如3*6=9*2、5*6=15*2等,都可以等以后更大的i来筛除,即9和15
                if (i % pj == 0) {
                    break;
                }
            }
        }
        // 输出素数的个数
        pw.print(prime.size());//也可以遍历出链表中的结果,也就是所有的素数
    }

}

标签:notPrime,Java,pw,质数,素数,import,pj,new
From: https://blog.csdn.net/weixin_72190053/article/details/145233090

相关文章

  • python+django/flask的医疗就诊平台Java+nodejs+php-计算机毕业设计
    目录技术栈和环境说明具体实现截图预期达到的目标系统设计详细视频演示技术路线解决的思路性能/安全/负载方面可行性分析论证python-flask核心代码部分展示python-django核心代码部分展示研究方法感恩大学老师和同学源码获取技术栈和环境说明本系统以Python开发语言......
  • python+django/flask的北部湾地区助农平台Java+nodejs+php-计算机毕业设计
    目录技术栈和环境说明具体实现截图预期达到的目标系统设计详细视频演示技术路线解决的思路性能/安全/负载方面可行性分析论证python-flask核心代码部分展示python-django核心代码部分展示研究方法感恩大学老师和同学源码获取技术栈和环境说明本系统以Python开发语言......
  • Java源码:实现斗地主游戏+大学生练手项目
    前言学Java的朋友们,福利来了,今天小编给大家带来了一款斗地主源码,看图:视频演示效果https://githubs.xyz/show/5.mp4环境JDK1.8 代码采用原生java类库编写,界面采用swing,完整源码获取地址:gitee.com/hadluo/java_game01.git 项目结构代码十分简洁,只有简单的7个类,实现......
  • Java五子棋源码联网版+Socket+Swing+大学生练手项目
    前言学Java的朋友们,福利来了,今天小编给大家带来了一款 Java五子棋源码联网版源码,看图:   实现了服务端和客户端。是联网版游戏基础模型。 环境JDK1.8 代码采用原生java类库编写,界面采用swing,完整源码获取地址:gitee.com/hadluo/java_game01.git 整体代码结......
  • JavaScript
    1定义:js是运行在客户端的脚本语言(script是脚本的意思)作用:表单动态校验网页特效服务端开发2区别:HTML/CSS标记语言-描述类语言(html决定网页结构内容css决定网页呈现给用户的模样)JS脚本语言-编程类语言(js实现业务逻辑和页面控制)3浏览器执行js过程:浏览器分为:渲......
  • Java源码:坦克大战+swing界面+大学生练手项目
    前言学Java的朋友们,福利来了,今天小编给大家带来了一款坦克大战源码,看图: 演示视频https://githubs.xyz/show/22.mp4环境JDK1.8实现步骤 代码采用原生java类库编写,界面采用swing,完整源码获取地址:gitee.com/hadluo/java_game01.git 启动类启动类是TankClinet.ja......
  • Java源码:植物大战僵尸 + 大学生练手项目
    前言学Java的朋友们,福利来了,今天小编给大家带来了一款 植物大战僵尸源码,看图:视频演示https://githubs.xyz/show/175.mp4环境JDK1.8 代码采用原生java类库编写,完整源码获取地址:gitee.com/hadluo/java_game01.git 类继承UML图源码实现我们先从main函数看起,继承了j......
  • JAVA游戏源码:仙剑|大学生练手项目
    学习java朋友们,福利来了,今天小编给大家带来了一款仙剑源码。注意:此源码仅供学习使用!!并不是实现完整的仙剑游戏,仅供java开发者学习的代码!!!演示视频地址https://githubs.xyz/show/211.mp4代码采用原生java类库编写,利用javaswing作为界面框架,完整源码获取地址:gitee.com/hadl......
  • CF 265B.Roadside Trees (Simplified Edition)(Java实现)
    题目分析    松鼠的起点在第一棵树的0位置,它的行动轨迹为到达顶端,吃坚果,到另一棵树的同位置,到达顶端,吃坚果。思路分析    根据题目分析,我们需要有一个不断更新的起始位置,单次循环内的时间=到达顶端的距离+吃坚果+跳跃=顶端-起始+1+1代码        ......
  • CF 284B.Cows and Poker Game(Java实现)
    题目分析    奶牛也打扑克。一共有三种情况,简称AFI,并且只有自己为AI状态其余全部人为AF状态才可以亮手牌。思路分析    根据题目分析,针对三个不同状态分析情况:当且仅当有一个I时,唯有这个奶牛可以亮牌,如果I的个数大于1,一个也不能亮牌;当没有I时,判断A的个数,有......