如何求素數

2021-09-10 06:35:09 字數 1496 閱讀 9506

1.素數,曾稱為質數。素數的定義為:

利用反證法可以證明,素數的個數是無窮的。歐幾里得證明素數是無限的。反證法利用排中法的思想。

1.1素數有哪些性質?

可以看到,其中較為重要的性質有(2),(5),(6),(7),(8)。其中第八個性質可能會有快速解題的妙用。

2.如何求素數?

2.1首先介紹什麼是合數。合數與質數是相對的概念。

合數的定義是:合數就是指自然數中除了能被1和本身整除外,還能被其他數(0除外)整除的數。合數也具有某些特殊的性質。

其中比較重要的個人認為應該是這一條:每乙個合數都可以以唯一的形式被寫成質數的乘積。即分解質因數。因為借助這一條性質,可以將需要比較的範圍縮小到2~math.sqrt(n)。

2.2 如何求素數

思路:1、任何乙個合數(都指正整數,下同),都是幾個質數的乘積。例如:18 = 2 * 3 * 3

2、如果乙個數n不能整除m,則n也不能整除m*i,i=1, 2, 3....。即,n%m != 0,則 n%(m*i)  != 0。例如,n不能整除2,那麼n也不能整除6。因為,如果n能整除6,即,n%6 = 0,也就是 n%(2*3) = 0,也就是n能整除2,與前面矛盾。

3、如果n不是質數,那麼n有滿足1a、依照判斷素數的概念,我們可以從2~n-1,依次去除,看餘數是否為0,複雜度為o(n)

b、改進一下,先判斷 n%2 是否為0,如果不為0,即 n%(2*i) != 0(前面的條例2),所以只要再判斷 3~n-1 之間的奇數即可,複雜度減半!為o(n/2)

同理,可以再判斷 n%3 是否為0,如果不為0,則可以去掉後面的 3*i

c、其實,並不需要一直整除到n-1,而只要整除到 sqrt(n) 即可。如果 a < sqrt(n), bd、結合前面的 b 和 c,我們就可以先判斷 n%2 是否為0,然後再判斷 3~sqrt(n) 之間的奇數即可,複雜度為o(sqrt(n)/2)

e、根據條例3,如果n是質數,則n只能被1和n整除,如果n不是質數,那一定存在1

關於各方法時間複雜度的分析和更快捷的方法點這裡:

時間複雜度分析以及改進演算法

/快速判斷乙個數是不是質數:(總共2步)

//1、判斷能否被2整除

//2、遍歷 3~math.sqrt(value)這個範圍

public static boolean isprime(int val)

for(int i=3; i<= math.sqrt(val); i+=2)

}return flag;

}---------------------

原文:

結束&

如何求素數

1。自然數是0,1,2 2。素數是2,3,5 不包括1的只能背1和它本身整除的自然數 public class test s i system.out.println 第 i 個素數是 n return s public static void main string args 求10000以內的所...

如何求素數

1。自然數是0,1,2 2。素數是2,3,5 不包括1的只能背1和它本身整除的自然數 public class test s i system.out.println 第 i 個素數是 n return s public static void main string args 求10000以內的所...

如何用PHP求素數

header content type text html charset utf 8 設定編碼格式 計算素數,素數是只能被自己和1整除的正整數,特別指出的是我們規定1不是素數 方法一 定義乙個函式計算素數 function prime number n if c 2 如果能夠整除這個數只有1個或者...