篩選法又稱篩法,具體做法是:先把n個自然數按次序排列起來。1不是質數,也不是合數,要划去。第二個數2是質數留下來,而把2後面所有能被2整除的數都劃去。2後面第乙個沒劃去的數是3,把3留下,再把3後面所有能被3整除的數都劃去。3後面第乙個沒劃去的數是5,把5留下,再把5後面所有能被5整除的數都劃去。這樣一直做下去,就會把不超過n的全部合數都篩掉,留下的就是不超過n的全部質數。因為希臘人是把數寫在塗臘的板上,每要劃去乙個數,就在上面記以小點,尋求質數的工作完畢後,這許多小點就像乙個篩子,所以就把埃拉託斯特尼的方法叫做"埃拉託斯特尼篩",簡稱"篩法"。(另一種解釋是當時的數寫在紙草上,每要劃去乙個數,就把這個數挖去,尋求質數的工作完畢後,這許多小洞就像乙個篩子。)
#include
#include
#include
//常見錯誤的寫法
void
sushu1()
else}}
}//輸出100到200之間的素數的正確做法
void
sushu2()
}if(j == i)
//是素數}}
//利用篩選法求n以內的素數,素數直接輸出,方法1
void
primer1
(int n)
arr[0]
= arr[1]
=0;//0,1不參與
for(i=
2;i}for
(i=0
;ifree
(arr);}
//方法2,將所有的素數返回
int*
primer
(int n,
int*rtlen)
arr[0]
= arr[1]
=0;//0,1不參與
for(i=
2;i}for
(i=0
;iint*brr =
(int*)
malloc
(count*
sizeof
(int))
;//存放素數
*rtlen = count;
//輸出引數,將陣列的長度帶出去
int j =0;
//brr下標
for(i=
0;ifree
(arr)
;return brr;
}int
main()
}free
(p);
primer1
(100);
sushu1()
;sushu2()
;return0;
}
對atime mtime和ctime的研究
前期準備 在實驗之前我們在討論為何會出現兩種修改時間,為此我們推測因為修改的不是檔案的同一資料,或者說同一地方,那麼我們就要先搞清楚檔案的結構。linux檔案系統是linux系統的心臟部分,提供了層次結構的目錄和檔案。檔案系統將磁碟空間劃分為每1024個位元組一組,稱為塊 也有用512位元組為一塊的...
對求素數演算法的一些簡單優化
求素數應該是每個程式設計者都會遇到的一道題目 筆者剛開始學程式設計時,只是根據素數定義將其實現 定義 在大於1的自然數中,除了1和它本身以外不再有其他因數 上面的 timeit為ipython自帶的魔法方法,用於簡單測試執行時間 結果時間為51.4 ms 1.75 ms per loop mean ...
求素數的幾種方法(暴搜法和篩選素數法)
參考自該篇部落格 參考自該篇部落格 其分為兩種,一種是直接for迴圈,另一種是建立在數學思想上的平方根迴圈。第二種演算法時間複雜度明顯優於第一種。也就是最簡單直接的for迴圈,判定這個數是否能被除1 和其本身以外的整數整除。這個也是基於for迴圈的一種方式,比上面那種方法稍微快了一點。當n的數值較大...