如何使用Python实现一个判断是否为质数的函数?
发布时间:2023-06-24 13:34:51
判断一个数是否为质数是常见的数学问题,也是编程中常见的问题。质数是指大于1的自然数,其只能被1和本身整除,不能被其他自然数整除,比如2、3、5、7、11等。
Python实现一个判断是否为质数的函数比较简单,常用的方法有两种,分别是试除法和埃氏筛法。
1. 试除法
试除法的思路是对于一个数n,将其从2开始到sqrt(n)的范围内的所有整数进行除法运算,如果n不能被这些数整除,那么n就是质数。
下面是Python代码实现:
import math
def is_prime(n):
if n < 2:
return False
for i in range(2, int(math.sqrt(n))+1):
if n % i == 0:
return False
return True
这个函数首先判断n是否小于2,如果是直接返回False,因为小于2的数都不是质数。然后从2开始循环到sqrt(n)范围内的整数,如果n可以被整除,那么就不是质数,返回False,否则就是质数,返回True。
2. 埃氏筛法
埃氏筛法的思路是将所有小于等于n的质数筛选出来。具体实现是从2开始,将2的倍数标记为合数,然后遍历到下一个未被标记的数,再将其所有的倍数标记为合数,以此类推,直到遍历完所有小于等于n的自然数。这个算法实现起来比较简单,但是空间复杂度比较高,需要额外的O(n)空间来保存筛选结果。
下面是Python代码实现:
def eratosthenes(n):
if n < 2:
return []
primes = [True] * (n+1)
primes[0] = primes[1] = False
for i in range(2, int(n**0.5)+1):
if primes[i]:
for j in range(i**2, n+1, i):
primes[j] = False
return [i for i in range(2, n+1) if primes[i]]
def is_prime(n):
if n < 2:
return False
primes = eratosthenes(n)
return n in primes
这个函数先调用eratosthenes函数找出n以内的所有质数,然后判断n是否在质数列表中,如果在就返回True,否则返回False。
总结
实现一个判断是否为质数的函数在Python中比较简单,有两种常用的方法,分别是试除法和埃氏筛法。试除法的思路是对于一个数n,将其从2开始到sqrt(n)的范围内的所有整数进行除法运算,如果n不能被这些数整除,那么n就是质数;埃氏筛法的思路是将所有小于等于n的质数筛选出来,从2开始,将2的倍数标记为合数,然后遍历到下一个未被标记的数,再将其所有的倍数标记为合数,以此类推。
