判断一个数字是否为素数存在多种算法,其复杂度各有不同。下面介绍两种常见的判断素数的算法:
- 暴力法(试除法)
这是最简单的方法,通过遍历从2到 n \sqrt{n} n(n的平方根)的所有整数,依次判断是否能整除n。如果找到能整除的因子,则n不是素数;否则,n是素数。这种方法的时间复杂度为O(√n)。
def is_prime(number):
if number <= 1:
return False
for i in range(2, int(number**0.5) + 1):
if number % i == 0:
return False
return True
- 厄拉多塞筛法(埃氏筛法)
这是一种筛选法,通过构建一个布尔数组,初始时假设所有数字都是素数,然后从2开始,将所有素数的倍数标记为非素数。最终,剩下的未被标记的数字即为素数。该方法适用于较大的素数判断,其时间复杂度为O(n log log n)。
def sieve_of_eratosthenes(limit):
is_prime = [True] * (limit + 1)
is_prime[0] = is_prime[1] = False
for num in range(2, int(limit**0.5) + 1):
if is_prime[num]:
for multiple in range(num * num, limit + 1, num):
is_prime[multiple] = False
primes = [num for num in range(limit + 1) if is_prime[num]]
return primes
这两种方法分别适用于不同的应用场景。对于小数字的素数判断,暴力法即可;对于大数字的素数筛选,厄拉多塞筛法更为高效。根据实际情况选择合适的算法可以提高代码的效率。