埃拉托斯特尼筛法+细节证明

2024-03-29 11:08

本文主要是介绍埃拉托斯特尼筛法+细节证明,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

埃拉托斯特尼筛法

顾名思义就是筛素数的方法
首先埃拉托斯特尼筛法实基于这样一个定理:一个正合数n,一定存在小于sqrt(n)的素数因子

所以此筛法就是将n的所有小于等于sqrt(n)的素数因子圈出来,然后把他们的倍数划去,剩下的没有被划去的就是素数

例如:25,sqrt(25)=5,那么所有小于等于5的素数因子就是2,3,5
我们把2,3,5的所有倍数划去,也就是4,6,8,9,10,12,14,15,16,18,20,21,22,24,25,最后剩下2,3,5,7,11,13,17,19,23就是素数

实现代码如下:

/*埃拉托斯特尼筛法,原理一个合数一定有小于等于sqrt(n)的素因子,
把所有这些素因子的倍数全部划去,那么剩下的就全是素数了*/
#include<bits/stdc++.h>
using namespace std;
const int Maxn=1e7;
bool vis[Maxn];
int prime[1000005];
int main()
{int n;cin>>n;prime[0]=0;memset(vis,false,sizeof(vis));for(int i=2;i<=sqrt(n);i++){if(!vis[i]){vis[i]=true;prime[++prime[0]]=i;for(int j=i*i;j<=n;j+=i){vis[j]=true;}}}for(int i=sqrt(n)+1;i<=n;i++){if(!vis[i]){prime[++prime[0]]=i;}}for(int i=1;i<=prime[0];i++) cout<<prime[i]<<endl;
} 

这里我们对划去素数倍数的步骤进行了一些优化,也就是代码中的
for(int j=i*i;j<=n;j+=i)部分,我们并不是从1倍开始划,而是从i倍开始,
举个例子:假设素数i=5,那么我们直接从5×5开始划,而5×4,5×3,5×2…后面的就已经省略掉,因为这些已经被之前更小的素数的倍数筛过了,严谨的读者会怀疑,你怎么知道?别急,我们下面来证明

证明:
我们假设素数的倍数为i×p,其中p<i

情况1.当p是素数时,i×p这个数是素数p的倍数,已经被p筛除了

情况2.当p是合数时,由质因数分解我们知道,任何一个大于1的正整数可以表示为若干个素数的乘积,我们不妨假设p=A×B×C,因为A,B,C<p<i,所以A,B,C是小于i的素数,所以i×p这个数已经被A,B,C中其中一个素数筛除过了,到底是哪个素数筛除的,取决于谁最小,证毕!

如果鄙人的博客能够让你有哪怕一点点的收获,都是鄙人最大的荣幸,鄙人厚着脸皮向您讨个点赞,谢谢。

这篇关于埃拉托斯特尼筛法+细节证明的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/858442

相关文章

vscode中使用go环境配置细节

1、在docker容器中下载了go的sdk 2、在/etc/profile.d/go.sh里填入如下内容: #!/bin/bashexport GOROOT=/home/ud_dev/goexport PATH=$GOROOT/bin:$PATH  3、设置go env go env -w GOPROXY=https://goproxy.cn,directgo env -w GO

使用WebP解决网站加载速度问题,这些细节你需要了解

说到网页的图片格式,大家最常想到的可能是JPEG、PNG,毕竟这些老牌格式陪伴我们这么多年。然而,近几年,有一个格式悄悄崭露头角,那就是WebP。很多人可能听说过,但到底它好在哪?你的网站或者项目是不是也应该用WebP呢?别着急,今天咱们就来好好聊聊WebP这个图片格式的前世今生,以及它值不值得你花时间去用。 为什么会有WebP? 你有没有遇到过这样的情况?网页加载特别慢,尤其是那

分享MSSQL、MySql、Oracle的大数据批量导入方法及编程手法细节

1:MSSQL SQL语法篇: BULK INSERT      [ database_name . [ schema_name ] . | schema_name . ] [ table_name | view_name ]         FROM 'data_file'        [ WITH       (      [ [ , ] BATCHSIZE = batch_siz

【LVI-SAM】激光雷达点云处理特征提取LIO-SAM 之FeatureExtraction实现细节

激光雷达点云处理特征提取LIO-SAM 之FeatureExtraction实现细节 1. 特征提取实现过程总结1.0 特征提取过程小结1.1 类 `FeatureExtraction` 的整体结构与作用1.2 详细特征提取的过程1. 平滑度计算(`calculateSmoothness()`)2. 标记遮挡点(`markOccludedPoints()`)3. 特征提取(`extractF

Post-Training有多重要?一文带你了解全部细节

1. 简介 随着LLM学界和工业界日新月异的发展,不仅预训练所用的算力和数据正在疯狂内卷,后训练(post-training)的对齐和微调方法也在不断更新。InstructGPT、WebGPT等较早发布的模型使用标准RLHF方法,其中的数据管理风格和规模似乎已经过时。近来,Meta、谷歌和英伟达等AI巨头纷纷发布开源模型,附带发布详尽的论文或报告,包括Llama 3.1、Nemotron 340

【项目日记】高并发内存池---细节优化及性能测试

终此一生,只有两种办法: 要么梦见生活,要么落实生活。 --- 勒内・夏尔 --- 高并发内存池---细节优化及性能测试 1 细节优化1.1 大块内存的申请处理1.2 配合定长池脱离使用new1.3 释放对象无需内存大小 2 调试Debug3 性能测试4 项目总结 1 细节优化 在前面的文章中我们已经实现了高并发内存池的申请内存逻辑和释放内存逻辑:

AI时代产品经理面临的变与不变:0经验求职产品经理要注意哪些细节?

AI时代,各种产品形态、业务的变化,让市场也对产品经理提出了新的要求,产品经理要有哪些变与不变呢?现在入行产品经理是好时机么?没有技术背景、没有学历有优势如何入行做产品经理?今天我们一起探讨一下! 产品人究竟需要具备哪些能力?看这个最新的能力模型图就知道了。 随着当前市场的细分,不同行业和领域对产品经理的能力要求已经从单一的具备产品专业能力演变成了兼具产品专业技能+行业/业务知识

端口安全老化细节

我们都知道port-security aging-time命令用来配置端口安全动态MAC地址的老化时间,但是后面还可以加上类型: [SW1-GigabitEthernet0/0/1]port-security aging-time 5 type  ·  absolute    Absolute time 绝对老化  ·  inactivity  Inactivity time相对老化 默认

【深度学习 图像分类】图像分类任务细节

无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。点这里可以跳转到教程。人工智能教程 实现一个完整的图像分类任务,大致需要分为五个步骤: 1、选择开源框架 目前常用的深度学习框架主要包括tensorflow、keras、pytorch、mxnet,caffe等; 2、构建并读取数据集 根据任务需求搜

【扩散模型(十)】IP-Adapter 源码详解 4 - 训练细节、具体训了哪些层?

系列文章目录 【扩散模型(一)】中介绍了 Stable Diffusion 可以被理解为重建分支(reconstruction branch)和条件分支(condition branch)【扩散模型(二)】IP-Adapter 从条件分支的视角,快速理解相关的可控生成研究【扩散模型(三)】IP-Adapter 源码详解1-训练输入 介绍了训练代码中的 image prompt 的输入部分,即 i