什麼是求素數
素數指的是因子只有1和本身的數(1不是素數),求解素數在數學上應用非常廣泛,而求解n以內的素數也是我們程式設計時常遇到的問題,在這個問題上,篩選法求解素數執行得非常快。
i在2到n-1之間任取乙個數,如果n能被整除則不是素數,否則就是素數
稱篩法篩選法又稱篩法,是求不超過自然數n(n>1)的所有質數的一種方法。據說是古希臘的埃拉託斯特尼(eratosthen程式設計客棧es,約西元前274~194年)發明的,又稱埃拉託斯特尼篩子。
具體做法是:
先把n個自然數按次序排列起來。1不是質數,也不是合數,要划去。第二個數2是質數留下來,而把2後面所有能被2整除的數都劃去。2後面第乙個沒劃去的數是3,把3留下,再把3後面所有能被3整除的數都劃去。3後面第乙個沒劃去的數是5,把5留下,再把5後面所有能被5整除的數都劃去。這樣一直做下去,就會把不超過n的全部合數都篩掉,留下的就是不超過n的全部質數。因為希臘人是把數寫在塗臘的板上,每要劃去乙個數,就在上面記以小點,尋求質數的工作完畢後,這許多小點就像乙個篩子,所rtvkeb以就把埃拉託斯特尼的方法叫做「埃拉託斯特尼篩」,簡稱「篩法」。(另一種解釋是當時的數寫在紙草上,每要劃去乙個數,就把這個數挖去,尋求質數的工作完畢後,這許多小洞就像乙個篩子。)
普通列舉法:
#include
#include
#include
#include
using namespace std;
bool isplain(int x)
} int cot=0;
for(int i=0; i
總結本文標題: c/c++利用篩選法算素數的方法示例
本文位址: /ruanjian/c/214537.html
求素數的幾種方法(暴搜法和篩選素數法)
參考自該篇部落格 參考自該篇部落格 其分為兩種,一種是直接for迴圈,另一種是建立在數學思想上的平方根迴圈。第二種演算法時間複雜度明顯優於第一種。也就是最簡單直接的for迴圈,判定這個數是否能被除1 和其本身以外的整數整除。這個也是基於for迴圈的一種方式,比上面那種方法稍微快了一點。當n的數值較大...
我所知的素數篩選法
素數篩選法在很多大牛的部落格中都有帖子,有的甚至給出3種方法。本文只是給我自己和能看到這篇文章的人分享一下我個人理解到現在的素數篩選法。素數篩選法常常的問題背景是給出乙個非負整數n,求小於 等於 n的非負整數內有幾個素數。下面先給出素數篩選法的原理 開出乙個大小為n的bool型陣列arr,全置為fa...
質數的後代 素數篩選法
題目描述 在上一季裡,曾提到過質數的孤獨,其實從另乙個角度看,無情隔膜它們的合數全是質數的後代,因為合數可以由質數相乘結合而得。如果乙個合數由兩個質數相乘而得,那麼我們就叫它是質數們的直接後代。現在,給你一系列自然數,判斷它們是否是質數的直接後代。資料規模和約定 1 t 20 2 要判斷的自然數 1...