- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
1-7 厄拉多塞篩的求質數法
例題7 質數的判定
判斷n是否為質數
質數是指除了1及其本身以外沒有其他因數的數,像
2,3,5,7,11…
等都是質數,但1並不是質數。
在判斷n是否為質數時,將n除以n以下的整數直至2為止,以觀察n能
除盡,這時如有被除盡的數,便被視為非質數而脫離出回圈。到了最後如無除盡的數,則此數即為質數。
此外,即使以n/2以上的整數除以n,n也沒有被除盡的道理,因此程式
開始時的值並不是從n開始,從n/2開始也沒關係,這點從直覺上即可判斷出來。
在數學計算上也可從開始。
程式: Rei07.cpp
練習問題7-1 2~N的所有質數
求出2~N的整數中所有的質數
利用例題7的思維方式,將質數存放至prime[ ]。程式: Dr7_1.cpp
練習問題7-2 厄拉多塞篩
在練習問題7-1的演算法中,反覆計算次數為(平均值)
,而”厄拉多塞篩”則是更有效率的求質數之方法。接下來要使
用這個方法從2~N中求出所有的質數
厄拉多塞篩演算法解說如下:
eq \o\ac(○,1)將2~n的所有數存放至”篩子”
eq \o\ac(○,2)將”篩子”中最小的數設為質數,如圖中▼的位置。
eq \o\ac(○,3)從”篩子”中取出質數的所有倍數,如圖中 / 的位置。
eq \o\ac(○,4)在達到n之前,反覆進行 eq \o\ac(○,2) eq \o\ac(○,3),留在”篩子”的(沒有劃斜線的部份)數即為質數。
在實際的程式方面,我們先設定陣列prime[2]~prime[n],陣列元素方面,2~n的數存放至”篩子”的情形設為1,從”篩子”取出數的情形設為0程式: Dr7_2.cpp
參考 厄拉多塞(Eratosthenes:275~194B.C.)
希臘哲學家。
參考 質因數分解
將正整數分解為質數的積極為質因數分解。舉例來說,126可分解為2,3,3,7。
以下是n的質因數分解演算法:
Step1: 反覆將n除以2,直到無法除盡為止,這時的除數為2。
Step2: 再反覆除以3,然後持續除以4,5,6…。
在實務上,我們只要找出質數即可,但因沒有質數表,只能依順序查詢質數。
如除以質數以外的數時,由於此數在以前已備質因數分解出的質數(以6為例,即2與3)除過了,因此無須再除。
Step3: 如將a設為除數,則Step2的反覆操作條件為之間, 而n值也會越除越小。
程式: Dr7_3.cpp
文档评论(0)