判斷素數的簡單演算法

2021-10-08 20:45:56 字數 885 閱讀 1420

1、定義法

素數是指只能被1和它本身整除的數。根據定義,只要在2到n-1(n是被判斷的數)中逐一去找有沒有能被它整除的數。有就不是,否則就是。

c語言偽**如下

bool isprime

(int num)

return true;

}

2、定義法改進

若所給定的數num不是素數,那麼存在不等於 1 的兩個約數x1 和 x2,並且滿足x1 >= sqrt(num),x2 <= sqrt(num)。因此可直接搜尋範圍從2到sqrt(num)就可以, 使得搜尋範圍減少。

c語言偽**如下

bool isprime

(int num)

return true;

}

3、素數分布優化

素數有乙個特點,總是滿足 num = 6x - 1 或 num = 6x + 1,其中 x 為自然數且有 x >= 1。

證明:6x 肯定不是素數,因為可以被 6 整除;

6x + 1 未知;

6x + 2 肯定不是素數,可以被 2 整除;

6x + 3 肯定不是素數,可以被 3 整除;

6x + 4 肯定不是素數,可以被 2 整除;

6x + 5 未知, 並且 6x + 5 等同於 6x - 1;

因此,對於大於等於 5 的素數,不能表示成 6x - 1 或 6x + 1 的一定不是素數。能表示的部分,有一些不是素數。因此,只需找到不是素數的這部分的就可以了。 因此,在遍歷的時候就可以以 6 為步長來進行判斷。

bool isprime

(int num)

return true;

}

素數判斷演算法

bool isprime int n bool isprime int n int p max void prime int n return n odd 最後把主體和 剩下的 乘起來作為結果 演算法思路 對於n,從素數表中取出任意的素數對其進行費馬測試,如果取了很多個素數,n仍未測試失敗,則認為 ...

大素數高效演算法判斷

前段日子我也在做素數,下面是我的乙個總結,看到那個2秒搞定的,我還真想去看看 當數字小於1000000時,可以用簡單的判斷 int isprime int n 但當數值在1000000到100000000時 介紹一種方法 prime 為事先做好的素數表 如果需要判斷的數最大為100000000,則p...

演算法題 判斷素數 質數

判斷素數 埃拉託斯特尼篩法 這種方法的思想是設定乙個標誌陣列isprimes n 標誌陣列的每一位標示相應的數是不是素數,初始化為全true。演算法從i 2開始,依次將質數的倍數標記為非素數,即將標記陣列的相應位改為false。標記質數的倍數的時候從i i也就是i的平方開始標記,不需要從i j 且j...