java 素数欧拉筛选_[C++]欧拉素数筛的理解与实现

在传统的素数筛法中,我们使用了对于每一个数n,在 1~(√n) 范围内进行取模检查,这样逐一判断的复杂度为n(√n)。

但如果我们需要更快的筛法时怎么办?

于是著名的欧拉筛诞生了。它能将复杂度降为**O(n)**级别。

1.关键理解:

欧拉筛的原理是保证在 2~n 范围中的每一个合数都能被唯一分解成它的最小质因数与除自己外最大的因数相乘的形式。因此我们枚举2~n中的每一个数作为筛法中的“除自己外的最大因数”,如果它未被标记为合数,就先将它放入素数表内,再将这个最大因数与素数表中已经找到的素数作为最小质因数相乘,将得到的这些数标记为合数。最后输出得到的素数表即可。

但是我们如何保证每个合数都被唯一分解?

解决方法如下:

当此时取出的素数表中的素数(即枚举的最小质因子)整除于当前枚举的合数时,我们就停止循环素数表,开始枚举下一个合数。

证明如下:

设当前枚举的最小质因子prime[i]整除于合数n时,即我们要筛掉合数 n*prime[i] ;如果我们此时不退出,继续枚举下一个素数prime[i+1],对于将要筛掉的合数 n*prime[i+1] 由于插入顺序从小到大,则 prime[i+1]>prime[i]。由于prime[i]整除于合数n,所以必然合数 n*prime[i+1] 还可以被分解为

$$(\frac{n}{prime[i]}*prime[i+1])*prime[i]$$

显然,在上面的分解方式中,我们将要筛掉的合数分解为更小的质因子 prime[i] ,这不符合我们对于每一个数被唯一分解的要求,所以我们可在代码中加入一行判断整除关系的代码进行优化。

2.代码实现:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using namespace std;

inline void read(int &x){

x=0;int f=1;

char ch=getchar();

while(ch'9'){

if(ch=='-')

f=-1;

ch=getchar();

}

while(ch>='0'&&ch<='9'){

x=(x<<1)+(x<<3)+(ch^48);

ch=getchar();

}

x*=f;

}

bool IsPrime[100005];

int prime[50005];

int main(int argc, char const *argv[])

{

int n,top=1;

memset(IsPrime,1,sizeof(IsPrime));

read(n);

for(int i=2;i<=n;i++)

{

if(IsPrime[i])

prime[top]=i,top++;

for(int j=1;j

{

if(i*prime[j]>n)

break;

IsPrime[i*prime[j]]=0;

if(i%prime[j]==0)

break;

}

}

cout<

for(int i=1;i

cout<

return 0;

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/275741.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

交互规则_您必须永不中断的10条交互设计规则

交互规则重点 (Top highlight)In life, there are certain rules you must never break. If you do there will be hell to pay. In User Interface design there are also rules to live by. They are called “heuristics” or general principles that improve usability in…

一个帮助我100%拿offer的面试学习法

大家好&#xff0c;我是若川。今天周日&#xff0c;再分享一篇相对轻松的文章。文中说的面试学习法有一定的借鉴意义。另外我也推荐大家每隔一段时间不为跳槽的更新自己简历&#xff0c;也是对自己一阶段的梳理总结&#xff0c;毕竟功在平时。哈喽大家好&#xff0c;我是大圣&a…

2010年终总结

还有两天2010就要结束了&#xff0c;写下自己的年终总结吧&#xff0c;以总结自己&#xff0c;展望明年。2010对我来说是怎样的一年呢&#xff1f;忙碌的一年&#xff0c;鸭梨更大的一年&#xff0c;折腾的一年&#xff0c;复杂的一年&#xff0c;梦游的一年&#xff0c;痛并快…

java获取apk启动activity_兼容 Android 10 启动 APK 实现方案

背景我们想启动 APK 程序&#xff0c;有很多种方法&#xff0c;可以使用 Intent&#xff0c;也可以使用 adb shell 命令来启动&#xff0c;还有通过反射来启动 APk 程序。我们这里主要讨论通过反射的方式来启动 apk 程序。Android10 之前&#xff0c;我们通过反射来启动 APK&am…

Android Studio中解决jar包重复依赖导致的代码编译错误

在原本的代码中已经使用了OKHTTP和rxjava&#xff0c;然后今天依赖retrofit的时候一直报错 Program type already present: okhttp3.internal.ws.RealWebSocket$1.class 说是我重复添加了OKHTTP的包&#xff0c;但其实我直接把OKHTTP的依赖注释掉都没用&#xff0c;只要依赖ret…

面试被问项目经验不用慌,按这个步骤回答绝对惊艳

大家好&#xff0c;我是若川。常有小伙伴问&#xff0c;面试时项目经验怎么回答&#xff0c;经常会分享这篇文章给TA。本文经授权转载。面试、学习源码系列、年度总结、JS基础系列前言本篇文章的作者是来自阿里淘系用户增长前端团队的“亦逊”&#xff0c;18年作为双非本科生通…

使用概念模型 和心智模型的_为什么要使用模型?

使用概念模型 和心智模型的In a former life, I studied critical feminist theory. This included the field of Semiotics — the study of signs and the production of meaning, as well as Deconstruction —the unpacking of meaning to question assumptions.在过去的生…

长效密钥与临时密钥JAVA判断_MSBuild无法使用临时密钥签署ClickOnce清单(错误MSB3326和MSB3321)...

我正在尝试在Windows Server计算机上构建ClickOnce Windows Forms项目(.NET 3.5 / Visual Studio 2010) . (为了使用Hudson CI自动化构建过程 . )为了对ClickOnce清单进行签名&#xff0c;我在Visual Studio中创建了一个临时密钥 temp.pfx . 我可以在我的工作站上从Visual Stud…

URL some

** 路由系统:URL配置(URLconf)就像Django所支撑网站的目录. 本质是URL与该URL要调用的函数的映射表 基本格式 : from django.conf.urls import url urlpatterns [url(正则表达式,views视图,参数,别名) ] 参数 -- 传给函数视图的默认参数 (字典形式) 别名 -- 一个可选的name参…

什么?在 VSCode 里也能用 Postman了?

大家好&#xff0c;我是若川。VSCode中有很多好用的插件&#xff0c;今天推荐 Postcode。面试、学习源码系列、年度总结、JS基础系列以前一直在用postman做API测试&#xff0c;如果你同时在使用vscode开发时&#xff0c;每次切出去可能比较烦&#xff0c;其实就是太懒了。。。作…

根据窗口名称查找关键字弹性域用到的表,列等信息

/*根据窗口名称查找关键字弹性域用到的表&#xff0c;列等信息*/--selectc.id_flex_name, a.id_flex_structure_name, b.form_left_prompt, c.application_table_name, b.application_column_name, b.flex_value_set_id fromfnd_id_flex_struct…

英语 动画 教学 字母_字母形式在阅读教学中的作用

英语 动画 教学 字母Note: this essay may also be found on Design Observer.注意&#xff1a;这篇文章也可以在 Design Observer 上找到 。 My first-grade reading tutor gave the best stickers. Puffy, smelly, sparkly — she even had a few that were fuzzy. At that …

java中自定义表单和流程_让驰骋工作流程引擎 ccbpm使用自定义表单来实现自己的业务逻辑....

1.1.1.1: SDK表单概要说明&#xff1a;我们把流程引擎与表单引擎统称为ccbpm&#xff0c;但是有一些用户并不想使用表单引擎&#xff0c;而是用自己的表单&#xff0c;仅仅使用流程引擎&#xff0c;这样的方式就要采用ccbpm的sdk表单开发模式。关于ccbpm的SDK:ccbpm的sdk就是cc…

乘风破浪的前端小姐姐,是如何一步步走向成功的?

大家好&#xff0c;我是若川。名校毕业的被删大佬也经历了社会的毒打&#xff0c;但她没有放弃。面试、学习源码系列、年度总结、JS基础系列王贝珊&#xff0c;腾讯高级工程师&#xff0c;腾讯 AlloyTeam 成员&#xff0c;现腾讯文档网络层技术负责人。毕业于中山大学。工作 6 …

【译】为什么我更喜欢对象而不是switch语句

原文自工程师Enmanuel Durn博客&#xff0c;传送门 最近&#xff08;或者不是最近&#xff0c;这完全取决于您什么时候阅读这边文章&#xff09;&#xff0c;我正在跟我的团队伙伴讨论如何去处理这种需要根据不同的值去处理不同的情况的方法&#xff0c;通常对于这种情况下&…

摩托罗拉周二将正式分拆为两经营实体

据华尔街中文网消息称&#xff0c;摩托罗拉公司周二将正式分拆为两个经营实体——摩托罗拉移动控股(MMI)和摩托罗拉解决方案公司(MSI)。前者由主要面向消费者的智能手机和机机顶盒业务组成&#xff0c;后者则专注于公共安全无线电和手持扫描仪业务。 上述两家公司的股票均已于…

如何创建和谐的色彩系统

拥有和谐的色彩系统的好处 (The benefits of having a harmonious color system) Consistent branding express across all platform 在所有平台上表达一致的品牌 The consistent interface creates a better user experience 一致的界面创建了更好的用户体验 More productive …

java restful接口测试_详解SpringBoot restful api的单元测试

现在我们来利用Spring Boot来构建一个RestFul API&#xff0c;具体如下&#xff1a;1.添加Springboot测试注解RunWith(SpringRunner.class)SpringBootTestpublic class UserControllerTest {}2.伪造mvc环境// 注入Spring 工厂Autowiredprivate WebApplicationContext wac;//伪造…

老姚浅谈:怎么学JavaScript?

大家好&#xff0c;我是若川。当初我就是看本文深受启发&#xff0c;开始看书读源码。所以现在联系了作者老姚 授权转载分享给大家。我按照文中的做法敲完了《JavaScript语言精粹 修订版》&#xff0c;在2017年7月23日写出了我的第一篇文章《读书笔记》。看完了《JavaScript面向…

JavaScript 如何使用闭包

闭包基本上是内部函数可以访问其范围之外的变量&#xff0c;可用于实现隐私和创建函数工厂 定义一个数组&#xff0c;循环遍历这个数组并在延迟3秒后打印每个元素的索引 先看一个不正确的写法&#xff1a; const arr [10, 12, 15, 21]; for (var i 0; i < arr.length; i) …