蓝桥杯练习笔记(十九-质数筛)

很多题涉及质数,比较好的方法是直接生成一个质数数组,要用的时候直接访问就行了,一个比最原始生成质数数组快的比较常用的生成质数算法--埃式筛

考虑这样一件事情:对于任意一个大于 1 的正整数 n,那么它的 x 倍就是合数(x > 1)。利用这个结论,我们可以避免很多次不必要的检测。

如果我们从小到大考虑每个数,然后同时把当前这个数的所有(比自己大的)倍数记为合数,那么运行结束的时候没有被标记的数就是素数了。

参考文章:OI Wiki

java 复制代码
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
    public static void main(String[] args) {
        int n=100005;
        ArrayList<Integer> isprime=new ArrayList<>(100005);
        Collections.fill(isprime,1);
        ArrayList<Integer> prime=new ArrayList<>();
        // 通过添加n个元素来确保ArrayList有足够的容量
        for (int i = 0; i <= n; i++) {
            isprime.add(1);
        }
        isprime.set(0,0);
        isprime.set(1,0);

        for(int i=2;i*i<=n;i++)
        {
            if(isprime.get(i)>0)
            {
                prime.add(i);

                for(int j=i*i;j<=n;j+=i)
                {
                        isprime.set(j,0);
                }
            }
        }
        //打印结果
        for(int i=0;i<prime.size();i++)System.out.println(prime.get(i));
    }
}
相关推荐
思成不止于此17 分钟前
MySQL 数据操作:增删改核心语法全解析
数据库·笔记·学习·mysql
RaLi和夕26 分钟前
硬件电路设计学习笔记1.三极管开关电路设计
笔记·嵌入式硬件·学习
测试199839 分钟前
软件测试之压力测试
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·压力测试
CoderYanger1 小时前
A.每日一题——1523. 在区间范围内统计奇数数目
java·数据结构·算法·leetcode·职场和发展
小龙1 小时前
【理论知识】主流测井技术优缺点对比笔记
笔记·石油勘探·测井技术·测井
QT 小鲜肉1 小时前
【孙子兵法之下篇】010. 孙子兵法·地形篇深度解析与现代应用
人工智能·笔记·读书·孙子兵法
QT 小鲜肉1 小时前
【孙子兵法之下篇】010. 孙子兵法·地形篇
人工智能·笔记·读书·孙子兵法
阿恩.7702 小时前
化学前沿:科技革新与跨学科应用
人工智能·经验分享·笔记·科技·计算机网络·数学建模
想暴富,学技术2 小时前
22条商规阅读笔记
笔记
独自破碎E3 小时前
一道面试高频题:最小覆盖子串的O(n)解法
面试·职场和发展