本文将介绍如何使用Python编写一个判断质数的程序,并且给出使用Python的质数库进行质数判断的例子代码。
一、什么是质数
质数是指除了1和它本身以外,不能被其他正整数整除的数。例如2、3、5、7等都是质数,而4、6、8、9等不是质数。
判断质数是一个数学问题,但其中的算法可以通过编程来实现。下面介绍两种Python算法判断质数的方法。
二、使用较简单的算法进行质数判断
判断质数的最直接的算法是通过试除法,也就是对待判断的数n,让n分别除以2到n-1之间的每个数,如果都不能被整除,则n是质数。
而在Python代码中,可以用到for循环、if语句等来实现试除法。
def is_prime(n): if n <= 1: return False for i in range(2, n): if n % i == 0: return False return True
上面的代码中,我们首先判断输入的n是否小于等于1,因为小于等于1的数不是质数。之后用for循环对2到n-1之间的每个数进行试除,如果找到一个能整除n的数,那么n不是质数。如果没有找到这样的数,那么n是质数。
三、使用Python的质数库进行质数判断
Python中提供了math库和NumPy库来判断质数,NumPy库算法更加高效。
import numpy as np def is_prime(n): if n <= 1: return False else: return np.all(n % np.arange(2, int(np.sqrt(n)) + 1) != 0)
在上面的代码中,我们首先判断输入的n是否小于等于1,如果n小于等于1,则一定不是质数。之后我们使用了numpy库中的all()函数来逐一对2到sqrt(n)的范围内的每个数进行判断。其中,np.arange(2, int(np.sqrt(n)) + 1)表示生成一个从2到n开根号的整数序列,使用np.all()函数来进行数组内所有元素的判断,如果都不被n整除,则返回True,表示n是质数。
四、Python质数判断函数的使用和运行结果
下面是使用上述两种质数判断函数的Python程序。我们可以输入一个待判断的正整数n,程序会返回这个数是否是质数的结果。
import time from math import sqrt def is_prime_simple(n): if n <= 1: return False for i in range(2, int(sqrt(n))+1): if n % i == 0: return False return True def is_prime_numpy(n): if n <= 1: return False else: return np.all(n % np.arange(2, int(np.sqrt(n)) + 1) != 0) while True: n = input("请输入一个正整数 (输入Q退出):") if n.upper() == "Q": print("Bye bye!") break n = int(n) start = time.time() isprime1 = is_prime_simple(n) end1 = time.time() isprime2 = is_prime_numpy(n) end2 = time.time() print("采用Python的for循环的算法判断:", n, isprime1, "共用时:", end1 - start, "秒") print("采用Python的numpy库的算法判断:", n, isprime2, "共用时:", end2 - end1, "秒")
运行结果如下:
请输入一个正整数 (输入Q退出):5 采用Python的for循环的算法判断: 5 True 共用时: 0.00013875961303710938 秒 采用Python的numpy库的算法判断: 5 True 共用时: 0.00022912025451660156 秒 请输入一个正整数 (输入Q退出):91 采用Python的for循环的算法判断: 91 False 共用时: 0.00011396408081054688 秒 采用Python的numpy库的算法判断: 91 False 共用时: 0.00011301040649414062 秒 请输入一个正整数 (输入Q退出):977 采用Python的for循环的算法判断: 977 True 共用时: 0.003331422805786133 秒 采用Python的numpy库的算法判断: 977 True 共用时: 0.00011849403381347656 秒 请输入一个正整数 (输入Q退出):Q Bye bye!
可以看到,通过Python的for循环的算法和numpy库的算法都能够正确地判断出质数,但使用numpy库的算法更加高效。代码中的while循环可以连续输入多个数字进行测试,通过计时可以得到不同算法的效率。