閒聊 搜尋素數的乙個方法

2021-07-23 09:00:50 字數 816 閱讀 7133

乙個學弟的c++作業要求寫乙個搜尋素數的程式。

休息時間寫了乙個,不保證最優,能看就行。

#include

#include

using

namespace

std;

bool* gen_primetable(uint32_t maxval);

int main()

cout

<< "找到了"

<< count << "個素數"

<< endl;

system("pause"); delete table;

}// 生成乙個用於標記素數的布林值表

bool* gen_primetable(uint32_t maxval)

return table; // 返回結果

}

平板低壓i7跑到100000000大概4秒左右,應該夠用了。

1、偶數能被2整除,直接忽略

2、能被除了自己和1之外的整數整除的數不是素數

3、%運算子在很多情況下能夠靠位運算代替來提高速度

4、有太多種方法可以不去判斷奇偶,盡量靠定址簡化

5、為了可讀性再優化就是鳥語了,如果封裝成模組那肯定再優化(哪來這麼蛋疼的功能)

6、還是有不少重複訪問的地方,都要訪問到冒煙了

7、不值得寫多執行緒,執行緒建立和同步需要時間,數量少的單執行緒早就算完了

8、你可以優化到彙編級別甚至fpga實現然而還是沒什麼巨大效能提公升

9、vector在這裡大材小用

通過定義乙個函式實現判斷素數的方法

素數的定義 質數 又稱素數 指在大於1的自然數中,除了1和該數自身外,無法被其他自然數整除的數 也可定義為只有1與該數本身兩個正因數的數 大於1的自然數若不是素數,則稱之為合數 也稱為合成數 如果我們想判斷乙個數n是素數,則我們只需要證明當2 i sqrt n 時,任意的n i 0即可 我們通過下邊...

1712乙個搜尋問題

乙個搜尋問題 time limit 1 seconds memory limit 32768 k total submit 580 accepted 222 description 設n個不同的整數按公升序存於陣列a 1.n 中,設計乙個時間複雜性為 logn 的分治演算法求下標i使得a i i,若...

乙個快速法求素數的程式

閒暇時寫了乙個找出小於某個數字的素數的程式。最常見的方法是篩選法吧。原理大致如下 若要求得16以內的所有素數,1 在陣列中存放一下資料 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 2 先篩選掉是2的倍數 2 3 4 5 6 7 8 9 10 11 12 13 14 15...