c语言筛选法_极少数人用过的另类素数求解法,C语言经典算法之筛选法求质数...
篩選求質(zhì)數(shù)
明除了自身之外,無法被其它整數(shù)整除的數(shù)稱之為質(zhì)數(shù),要求質(zhì)數(shù)很簡(jiǎn)單,但如何快速的求出質(zhì)數(shù)則一直是程式設(shè)計(jì)人員與數(shù)學(xué)家努力的課題,在這邊介紹一個(gè)著名的 Eratosthenes求質(zhì)數(shù)方法。
行文不易,新手上路,多多關(guān)注,這真的對(duì)我很重要,私信更有驚喜
首先知道這個(gè)問題可以使用回圈來求解,將一個(gè)指定的數(shù)除以所有小于它的數(shù),若可以整除就不是質(zhì)數(shù),然而如何減少回圈的檢查次數(shù)?如何求出小于N的所有質(zhì)數(shù)?首先假設(shè)要檢查的數(shù)是N好了,則事實(shí)上只要檢查至N的開根號(hào)就可以了,道理很簡(jiǎn)單,假設(shè)A*B = N,如果A大于N的開根號(hào),則事實(shí)上在小于A之前的檢查就可以先檢查到B這個(gè)數(shù)可以整除N。不過在程式中使用開根號(hào)會(huì)精確度的問題,所以可以使用 i*i <= N進(jìn)行檢查,且執(zhí)行更快。
再來假設(shè)有一個(gè)篩子存放1~N,例如:
23 456789101112131415161718192021 ....N
先將2的倍數(shù)篩去:
23 579111315171921....N
再將3的倍數(shù)篩去:
23 5711131719....N
再來將5的倍數(shù)篩去,再來將7的質(zhì)數(shù)篩去,再來將11的倍數(shù)篩去........,如此進(jìn)行到最后留下的數(shù)就都是質(zhì)數(shù),這就是Eratosthenes篩選方法(Eratosthenes Sieve Method)。檢查的次數(shù)還可以再減少,事實(shí)上,只要檢查6n + 1與6n + 5就可以了,也就是直接跳過2與3的倍
數(shù),使得程式中的if的檢查動(dòng)作可以減少
源碼實(shí)現(xiàn)
行文不易,新手上路,多多關(guān)注,這真的對(duì)我很重要,私信更有驚喜
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的c语言筛选法_极少数人用过的另类素数求解法,C语言经典算法之筛选法求质数...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 浮点数正则表达式_正则表达式的邮箱,手机
- 下一篇: httpclient异步发送请求_关于T