第六章 数学问题 ----------6.13 素数的筛法(第十万零二个素数)

基础算法(二)筛法求素数 1.基本思想        把从1开始的、某一范围内的正整数从小到大顺序排列, 1不是素数,首先把它筛掉。剩下的数中选择最小的数是素数,然后去掉它的倍数。依次类推,直到筛子为空时结束。 2.示例 1           2          3           4            5            6            7            8           ... 阅读详情

素数定理:

       给出从整数中抽到素数的概率。从不大于n的自然数随机选一个,它是素数的概率大约是1/ln n。也就是说在不大于n的自然数里,总共的素数为 n/lgn。

筛法:

  用筛法求素数的基本思想是(本质上也能算是一种预处理):把从1开始的、某一范围内的正整数从小到大顺序排列, 1不是素数,首先把它筛掉。剩下的数中选择最小的数是素数,然后去掉它的倍数。依次类推,直到筛子为空时结束。如有:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30。

  1不是素数,去掉。剩下的数中2最小,是素数,去掉2的倍数,余下的数是:3 5 7 9 11 13 15 17 19 21 23 25 27 29 。剩下的数中3最小,是素数,去掉3的倍数,如此下去直到所有的数都被筛完,求出的素数为:2 3 5 7 11 13 17 19 23 29。

 

题目:第十万零二个素数

  请问,第100002(十万零二)个素数是多少?   请注意:“2” 是第一素数,“3” 是第二个素数,依此类推。

  代码:

public class 第十万零二个素数 {

    public static void main(String[] args) {
        long now = System.currentTimeMillis();
        // nlognlogn
        f(100002);
        System.out.println("耗时:" + (System.currentTimeMillis() - now) + "ms");
        
        /*============Java自带的api==========*/
        now = System.currentTimeMillis();
        BigInteger bigInteger = new BigInteger("1");
        for (int i = 1; i <= 100002; i++) {
            bigInteger = bigInteger.nextProbablePrime();
        }
        System.out.println(bigInteger);
        System.out.println("耗时:" + (System.currentTimeMillis() - now) + "ms");
        
        /*==========朴素解法=========*/
        now = System.currentTimeMillis();
        int count = 0;
        long x = 2;
        while(count<100002){
            if (isPrime(x)) {
                count++;
            }
            x++;
        }
        System.out.println(x-1);
        System.out.println("耗时:" + (System.currentTimeMillis() - now) + "ms");
    }
    public static boolean isPrime(long num){
        for (int i = 2; i*i <= num; i++) {
            if (num%i==0) {
                return false;
            }
        }
        return true;
    }
    /**
     * 
     * @param N 第N个素
     */
    private static void f(int N){
        int n = 2;
        // 自然数n之内的素数个数n/ln(n)
        // 得到整数范围
        while(n/Math.log(n)<N){
            n++;
        }
        int []arr = new int[n];
        int x = 2;
        while(x<n){
            if (arr[x]!=0) {
                x++;
                continue;
            }
            int k=2;
             //对每个x,我们从2倍开始,对x的k倍,全部标记为-1
            while(x*k<n){
                arr[x*k] = -1;
                k++;
            }
            x++;
        }
        // System.out.println(arr);
        // 筛完之后,这个很长的数组里面非素数下标对应的值都是-1
        int sum = 0;
        for (int i = 2; i < arr.length; i++) {
            // 是素数,计数+1
            if (arr[i] == 0) {
                // System.out.println(i);
                sum++;
            }
            if (sum == N) {
                System.out.println(i);
                return;
            }
        }
    }

}

  结果:

【华为OD机试真题 Java语言】41、 查找接口成功率最优时间段 | 机试真题+思路参考+代码解析(C卷)(本题100%) 服务之间交换的接口成功率作为服务调用关键质量特性,某个时间段内的接口失败率使用一个数组表示, >数组中每个元素都是单位时间内失败率数值,数组中的数值为0~100的整数, >给定一个数值(minAverageLost)表示某个时间段内平均失败率容忍值,即平均失败率小于等于minAverageLost, 找出数组中最长时间段,如果未找到则直接返回NULL。 阅读详情

相关推荐

Lumerical官方案例、FDTD时域有限差分法仿真学习(三)——环形谐振器(Ring resonator)之第二&第三部分

二、使用 MODE 的参数提取和蒙特卡罗 三、最终参数提取

weixin_45719141的博客 1万+

求第100002(十万零二)个素数

第1个素数是2,第2个素数是3,...求第100002(十万零二)个素数import java.util.ArrayList; public class Main { public static void main(String[] args){ ArrayList&lt;Long&gt; list = new ArrayList&lt;Long&gt;(...

一个吃水不忘挖井人的博客。希望能帮助到你 1646

Mac上安装虚拟机搭载window系统

用Mac的都知道,很多window用的软件是Mac版本没有的。平时有的还得要求去用那些软件,有几种方式可供大家选择: 1.再买个window本; 2.装双系统; 3.装虚拟机,搭载window系统。 我比较推荐第3条,这样可以在Mac本上做到双开,一边开着mac一边开着window,还能做到同时处理文件,不至于重新启动操作系统,下边是具体实现步骤,其中有几个需要下载的,建议在网速好的时候完...

Coder_Mumu的博客 1万+

筛法求100002(十万零二)个素数

题目: 素数就是不能再进行等分的整数。比如:7,11。而9不是素数,因为它可以平分为3等份。一般认为最小的素数是2,接着是3,5,... 请问,第100002(十万零二)个素数是多少? 请注意:2 是第一素数,3 是第二个素数,依此类推。 程序如下: //求第十万零2个素数 public class SuShu {     /**      * @param

璐璐的专栏 2006

Docker容器n8n中 read/write files from disk 无法读取容器内文件解决方案

《n8n文件读写Docker部署常见问题解决方案》摘要:针对n8n 1.90.2版本在Docker环境下文件读写失败问题,本文分析常见错误包括路径错误(ENOENT)、权限不足(EACCES)及节点误用问题。核心解决方案为:1)通过-v参数挂载宿主机目录到容器(如/files);2)使用新版Read/WriteFilesfromDisk节点操作文件;3)确保权限设置正确。提供可直接导入的示例工作流JSON,演示从CSV读取到结构化数据处理的全流程。特别强调已部署用户需重新挂载卷的正确操作方式,并附解决方案对

m0_74822402的博客 2184

基于大模型的肾结石诊疗全流程风险预测与方案制定研究报告

目录一、引言1.1 研究背景与意义1.2 国内外研究现状1.3 研究目标与内容二、大模型技术原理与应用概述2.1 大模型的基本原理2.2 大模型在医疗领域的应用进展2.3 适用于肾结石预测的大模型选择与依据三、术前风险预测与准备3.1 患者身体状况评估3.2 结石情况分析3.3 术前准备方案制定四、术中风险预测与应对4.1 出血风险预测与处理4.2 脏器损伤风险预测与预防4.3 实时监测与决策支持五、术后恢复预测与护理5.1 恢复时间预测5.2 护理要点与措施5.3 并发症预防与处理六、并发症风险预测与管理

嵌入式毕设/课设资料清单(速查手册·文档模板·题库,持续更新)→ 见最新文章 1149

xjoi1002

题目描述: 用质数筛选法,求2到N的所有质数。 筛法求素数,指的是每次将一个素数的所有的倍数去掉,如果当前的数没有被比它小的数去掉过,那么当前的数就是素数。 比如1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1不是素数。不用管。 2是素数,那么2的所有的倍数要被去掉。 3是素数,那么3的所有的倍数要被去掉。 4 被去掉了。不用管。 这样做下去我们就可以筛选出所有的指定范围内的素数了。 输入格式: 一个正整数N。 输出格式: 输出

m0_61555916的博客 878

三极管NPN与PNP的工作原理及快速识别技巧

本文深入浅出地解析了三极管NPN与PNP的核心工作原理。通过“水龙头”比喻,阐明其以小电流控制大电流的放大与开关本质。文章重点对比了NPN与PNP在电流方向、电位关系和控制逻辑上的根本区别,并提供了快速识别技巧与实用的选型、应用指南,帮助电子爱好者与工程师快速掌握这两种基础元件的关键知识。

neovim7hacker的博客 455

数组-筛法求素数

题目描述: 筛法求素数,指的是每次将一个素数的所有的倍数去掉,如果当前的数没有被比它小的数去掉过,那么当前的数就是素数。 比如1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1不是素数。不用管。 2是素数,那么2的所有的倍数要被去掉。 3是素数,那么3的所有的倍数要被去掉。 4 被去掉了。不用管。 。。。 这样做下去我们就可以筛...

Jeff_的博客 4138

手动测试台架搭建,让你的车载测试更轻松

如果你也在经常进行车载测试,就知道有时候手头的设备并不能完全满足需求。 在我之前的测试中,发现了一些问题,但是却找不到根本原因。于是,我开始思考如何打造一个更为完美的手动测试台架,让测试变得更加轻松。 经过不断地实践和调试,我终于成功搭建出了一个能够满足自己需求的测试台架。现在,我想和大家分享这个搭建的经验,希望能够帮助到在车载测试领域工作的小伙伴们,让你们的测试更加准确、高效!

weixin_67553250的博客 1万+

【ESP32摄像头开发实例】-视频流接入Home Assistant

在这个项目中,我们将使用ESP32-CAM板构建一个IP监控摄像头。ESP32摄像头将托管一个视频流媒体网络服务器,您可以使用网络中的任何设备进行访问。

视觉与物联智能 793

筛法求素数

素数筛法就是每次把已知的素数的倍数晒去,筛掉前sqrt(N)中素数的倍数就可以了; 先把n个自然数按次序排列起来。1不是质数,也不是合数,要划去。第二个数2是质数留下来,而把2后面所有能被2整除的数都划去。2后面第一个没划去的数是3,把3留下,再把3后面所有能被3整除的数都划去。3后面第一个没划去的数是5,把5留下,再把5后面所有能被5整除的数都划去。这样一直做下去,就会把不超过N的全部合数都筛

KING 688

YOLOv11 改进入门篇 | 轻量级涨点技巧:GhostConv 替代普通卷积的实战指南

摘要: 本文介绍如何通过GhostConv改进YOLOv11,实现轻量化涨点。YOLOv11深度增加导致参数量、延迟和内存占用上升,GhostConv通过“本征特征+线性变换”策略,在精度几乎无损的情况下降低30%-50%计算量。文章详细解析GhostConv原理,对比普通卷积的参数量和FLOPs优势,并提供完整的代码级改造流程,包括模块实现、注册及网络配置。实验表明,该方法有效提升边缘端推理效率,适用于移动端等资源受限场景。

shrgegrb的博客 1657

5.2 筛法求素数

  一个数,如果只有1和它本身两个因数,这样的数叫质数(或素数)。如2、3、5、7都是质数。  一个数,如果除了1和它本身还有别的因数,这样的数叫合数。如4、6、15、49都是合数。  1既不是质数,也不是合数。  #include&lt;iostream&gt; #include&lt;cstdio&gt; using namespace std; int main() { int ...

yanyanwenmeng的博客 575

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

筛选法求素数

判断一个数N是不是素数,可以用2到之间的所有整数去除n,看能否整除。如果都不能整除,那么n是素数(慢)。 筛选法求素数:把2到n中所有的数都列出来,然后从2开始,先划掉n内所有2的倍数,然后每次从下一个剩下的数(必然是素数)开始,划掉其n内的所有倍数。最后剩下的数,就都是素数。 空间换时间,加快了计算速度。 #include &lt;iostream&gt; //筛法求素数 #include...

优快云 blog of twy 449

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

第100002个素数(埃拉托斯特尼筛法)

素数就是不能再进行等分的整数。比如:7,11。而9不是素数, 因为它可以平分为3等份。一般认为最小的素数是2,接着是3,5,… 请问,第100002(十万零二)个素数是多少? 请注意:2 是第一素数,3 是第二个素数,依此类推。#include<iostream> #define n 10000000 using namespace std; bool a[10000000];int mai

hg_zhh 1379

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

求第十万零二个素数

#include<iostream> using namespace std; int fun(int a) { int i; for(i = 2; i * i <= a ; i++) { if(a % i==0) ...

baju2161的博客 638

算法1:素数问题的三种解决方法:一般法+两个筛子(例子:哥德巴赫猜想)

算法1:素数问题的三种解决方法:一般法+两个筛子(例子:哥德巴赫猜想) 素数定义:质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。 1既不是素数也不是合数 1.一般法(一定优化的素数判定) 先把代码片贴上: int is_prime (int n){ if (n == 1) return 0; //1既不是合数也不是素数 if (n == 2) return 1;//把2拿出讨论 else{ for (int i = 2; i < (i

m0_53217058的博客 689

【算法练习】素数筛法/分解素因数 王道机试指南 7道题

素数即只能被自身和1整除的大于1的正整数。 判断某个数N是否是素数可以用所有的>1小于<sqrt(n)的整数去试着整除该数 常常用作预处理进行素数筛选法。在获得一个素数i时,将它的所有倍数(从i*i开始)标记成非素数。 int prime[10000]; int primeSize; bool mark[10001] ------------《王道机试指南》 ...

一蓑烟雨任平生 705

P5736 【深基7.例2】质数筛

题目描述 输入 n(n≤100) 个不大于 100000 的整数。要求全部储存在数组中,去除掉不是质数的数字,依次输出剩余的质数。 输入格式 无 输出格式 无 输入输出样例 输入 5 3 4 5 6 7 输出 3 5 7 我咋觉得这个题应该算入门难度讷? #include<bits/stdc++.h> using namespace std; int isit(int); int ma...

bupt_sanqing的博客 1600
上一篇: 第六章 数学问题 -------- 6.12 素数及质因数分解
下一篇: 第六章 数学问题 -------- 6.14 【快速幂】斐波那契数列
Estrellas_
博客等级 码龄9年 273粉丝 233原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值