当前位置:育儿知识大全 早教内容页

如何判断一个数是否是质数

判断一个数 nnn>1n > 1)是否为质数,可以使用以下几种常见方法:

试除法

这是最基本的方法。从 22 开始,一直到 n\sqrt{n}

为止,用每个整数 ii 去除 nn,如果 nn 能被 ii 整除(即 nmodi=0n \bmod i = 0),那么 nn 就不是质数;如果在这个范围内都不能整除,那么 nn 就是质数。

例如判断 1919 是否为质数:

计算 194.36\sqrt{19} \approx 4.36

4.36

2244 依次去除 1919

19÷2=9119 \div 2 = 9 \cdots \cdots 1(余数为 11,不能整除)。

19÷3=6119 \div 3 = 6 \cdots \cdots 1(余数为 11,不能整除)。

19÷4=4319 \div 4 = 4 \cdots \cdots 3(余数为 33,不能整除)。

 

由于在 2219\sqrt{19}

这个范围内没有数能整除 1919,所以 1919 是质数。

埃拉托色尼筛法(适用于判断一定范围内的质数)

如果要找出小于等于 NN 的所有质数,可以使用这种方法。步骤如下:

创建一个布尔数组 isPrimeisPrime,长度为 N+1N + 1,初始值都设为 truetrue,表示假设所有数都是质数。

0011 对应的 isPrime[0]isPrime[0]isPrime[1]isPrime[1] 设为 falsefalse,因为 0011 不是质数。

22 开始,遍历到 N\sqrt{N}

如果 isPrime[i]isPrime[i]truetrue,说明 ii 是质数。

然后将 ii 的倍数(从 i×ii \times i 开始,因为 2i,3i,,(i1)i2i, 3i, \cdots, (i - 1)i 在之前已经被标记过了)对应的 isPrimeisPrime 数组位置设为 falsefalse,表示这些数不是质数。

 

遍历结束后,isPrimeisPrime 数组中值为 truetrue 的索引位置对应的数就是质数。

例如找出小于等于 3030 的所有质数:

初始化 isPrimeisPrime 数组,isPrime[0]=falseisPrime[0] = falseisPrime[1]=falseisPrime[1] = false,其余为 truetrue

22 开始:

isPrime[2]=trueisPrime[2] = true,将 2×2=42 \times 2 = 42×3=62 \times 3 = 62×4=82 \times 4 = 8\cdots2×15=302 \times 15 = 30 对应的 isPrimeisPrime 位置设为 falsefalse

 

接着看 33

isPrime[3]=trueisPrime[3] = true,将 3×3=93 \times 3 = 93×4=123 \times 4 = 12\cdots3×10=303 \times 10 = 30 对应的 isPrimeisPrime 位置设为 falsefalse

 

再看 44,由于 isPrime[4]=falseisPrime[4] = false,跳过。

55

isPrime[5]=trueisPrime[5] = true,将 5×5=255 \times 5 = 25 对应的 isPrimeisPrime 位置设为 falsefalse

 

当遍历到 305.48\sqrt{30} \approx 5.48

5.48 时结束。

最终,isPrimeisPrime 数组中值为 truetrue 的索引 22335577111113131717191923232929 就是小于等于 3030 的质数。