素數的判斷

2021-10-01 09:39:12 字數 1191 閱讀 7937

要判斷素數,我們首先來了解一下什麼是素數

素數:也稱為質數,素數(質數)是指在大於1的自然數中,除了1和它本身以外不再有其他因數的自然數。

下面我們來判斷乙個數是否為素數

首先,來乙個最普遍的:

#include#includeint su(int n)

} return 1;

}int main()

這種方法時間複雜度為 o(n),如果計算某個區間中的所有素數時,運用此方法的複雜度則為o(n^2),會有超時的風險,此時我們就需要對演算法進行改進;

下面,再來一種優化過的方法,去計算某一整數區間 [ 2, n] 的所有素數 ——篩選法

此方法的思路為:設篩子 u,初始時區間中的所有數都在篩中,按遞增順序搜尋篩中的最小數,將其倍數從篩中篩去,最終篩中留下的數即為素數。

#include#includeconst int maxn = 1e5+7;

bool u[maxn];

int su[maxn];

int main()

} }

for(int i = 2; i <= n; i++)

} for(int i = 0; i < t; i++)

return 0;

}

此演算法的時間複雜度為 o(n * long logn);

演算法中合數是作為素數的倍數被篩去的,顯然,如果每個合數僅被它最小的質因數篩去,則演算法效率可以大幅度的提公升,由此引出一種更優化的演算法 ——尤拉篩法

#include#includeconst int maxn = 1e5+7;

bool u[maxn];

int su[maxn];

int main()

for(int j = 1; j < t; j++)

u[i*su[j]] = false; //將 i 與當前素數的乘積從篩在中篩去

if(i%su[j] == 0) break; // 若當前素數為 i 的最小素因子,則分析下乙個整數

} }

for(int i = 1; i < t; i++)

return 0;

}

尤拉篩法的時間複雜度可以優化到 o(n);

素數的判斷

所謂素數是指除了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...