判断一个大于 2 的正整数 n 是否为素数,请用至少两种方法实现。
时间: 2024-04-30 19:24:33 浏览: 13
方法一:试除法
试除法是最简单的判断素数的方法。对于一个大于 2 的正整数 n,从 2 开始到 sqrt(n) 进行试除,如果能被整除,则 n 不是素数,否则 n 是素数。
Python 代码实现如下:
```
import math
def is_prime(n):
if n <= 1:
return False
for i in range(2, int(math.sqrt(n)) + 1):
if n % i == 0:
return False
return True
```
方法二:筛法
筛法是一种更高效的判断素数的方法,其基本思想是先把所有的数都列出来,然后用一种方法把不是素数的数筛掉,最后剩下来的就是素数。
常见的筛法有埃拉托斯特尼筛法和欧拉筛法,这里以欧拉筛法为例。
欧拉筛法的基本思想是:先把 2 到 n 之间的所有数都列出来,然后从小到大遍历这些数,如果当前的数是素数,那么就把它的倍数都标记为合数。具体实现时可以用一个布尔数组来表示每个数是否是素数,初始值为 True,然后从 2 开始遍历,如果当前的数是素数,就把它的倍数都标记为 False。
Python 代码实现如下:
```
def sieve(n):
is_prime = [True] * (n + 1)
primes = []
for i in range(2, n + 1):
if is_prime[i]:
primes.append(i)
for p in primes:
if i * p > n:
break
is_prime[i * p] = False
if i % p == 0:
break
return is_prime[n]
```
以上两种方法都可以判断一个大于 2 的正整数是否为素数,试除法的时间复杂度是 O(sqrt(n)),而欧拉筛法的时间复杂度是 O(nloglogn),更优秀,但是需要额外的空间来存储素数。