對素數判斷的查表

2021-09-12 21:10:24 字數 1105 閱讀 7274

描述:

對於我們常見的素數問題大概就是判斷和輸出了,而我們常用的臨界判斷條件就是折半判斷和平方根判斷,顯然後者相比前者所用時間更低一些.那還有沒有其他的辦法了呢?
6倍原理:

對於素數序列 2, 3, 5, 7, 11…我們可以發現除過2和3之外,其他的數字都是在6的倍數的旁邊。於是,可以先判斷是否6的倍數旁邊來確實是否是素數,然後從剩下的裡面排除是素數序列前面的元素是其因素的元素。

查表法:

可以先從一段**裡面生成素數序列,把這個序列做成表或者檔案查詢就可以了

例如下面的**:

#include

#include

#include

#include

#include

#include

using namespace std;

vectorprime;

/* 函式說明:

*函式名:void storedprime(uint32_t &num)

*引數說明:num 無符號32位變數,表示所要求得的質數不超過此值

*函式功能:結合6倍原理實現將不超過num的值存放到vector型別的容器裡面

*函式輸出:無

*時間複雜度:最壞:o(n^(3/2)) 最好:o(n)

*/void storedprime(uint32_t &num) //儲存小於等於num的素數到容器裡面

if (i % 6 != 1 && i % 6 != 5)

continue;

for (int t = 5; t <= sqrt(i); t += 6)

}if (flag1)

continue;

prime.push_back(i);}}

int main()

file << "}";

file.close();

}system("pause");

return 0;

}

對應的表部分如圖:

素數的判斷

所謂素數是指除了1和它本身以外,不能被任何整數整除的數,例如17就是素數,因為它不能被2 16的任一整數整除。因此判斷乙個整數m是否是素數,只需把m被2 m 1之間的每乙個整數去除,如果都不能被整除,那麼m就是乙個素數 另外判斷方法還可以簡化。m不必唄2 m 1之間的每乙個整數去除,只需被2 m之間...

素數的判斷

素數是啥?知道了這個就能夠知道如何判斷乙個數是否為素數了。這篇博文裡詳細說明了素數是啥 素數 如果乙個整數a 1且只能被平凡約數1和它自身所整除,則這個數是素數。也就是說素數是恰好有2個約數的整數,即1和它本身。因為n的約數都不超過n,所以只要檢查2 n 1的所有整數是否整除n就能判斷n是不是素數了...

素數的判斷

素數 首先,儲存最小素數2,然後,從3開始,在奇數中尋找素數。用不大於該奇數一半的所有奇數去整除它,如果都除不盡,該奇數是素數。曾稱質數。乙個大於1的正整數,如果除了1和它本身以外,不能被其他正整數整除,就叫素數。如2,3,5,7,11,13,17 8 2042 0sample output 8 3...