c語言實現位陣列實現素數最優演算法

2021-09-30 20:47:38 字數 831 閱讀 5135

前幾天在廣州去面試遊戲開發,其中一道題是素數的演算法優化,無奈之下,實在想不出,失敗後回家宿舍查詢了一下資料,目前最優的應該是(不太確定)初等數論的篩選法,用空間換時間的一種思想。

篩選法的具體的說明:

位陣列實現的具說明:

下面貼上我的**:

//vs2017 win10 64位debug

//三代i5,計算21億多以內的素數,用時146秒

#include #include #include #define n _crt_int_max //int 型別的最大表示,大概21億多

#include #include char *init_bin(int n)

int main()

for (i = 3; i < sqrt(n); i++)//把3到根號n質數的倍數去掉 }

end = clock();

printf("time=%f\n", (double)((end - start) / clk_tck));//計算時間

for (i = 0; i < n; i++)

system("pause");

return 0;

}

我的電腦是三代i5,4g win10系統,計算21億多用了146秒。大夥可以試試

列印比計算還要長時間

附上初等數論原書,唉,後悔專業課沒學好

素數判斷 C語言實現

除了1和自身之外不能整除其它數,稱之為素數.最小的素數是2.沒有最大的素數.1000以內素數,如下圖所示 關於素數的演算法,一般有2種.第1種,給出乙個數n n 2 判斷n是不是素數 第2種,給出乙個數n n 2 把 2,n 的所有素數拿出來 判斷乙個數n是否是素數,最簡單粗暴的方法就是把n分別與i...

兩有序陣列中位數 c語言實現

給定兩個大小為 m 和 n 的有序陣列 a 和 b。請你找出這兩個有序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 你可以假設 a 和 b 不會同時為空。include include define min a,b a length a if x2 length b return ...

c語言實現螺旋陣列

螺旋陣列 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9 分析 這是乙個一維維度和二維維度相等的陣列arr len len 將num 1開始從arr 0 0 賦值,直到num len len結束賦值。在賦值過程中,如...