11 對求素數的研究和分析

2021-10-10 13:42:59 字數 1341 閱讀 7710

篩選法又稱篩法,具體做法是:先把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的數值較大...