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.pswp.cn/news/275741.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/275741.shtml
英文地址,請注明出處:http://en.pswp.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) …