乙個學弟的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...