国外建筑设计网站推荐/广告营销案例分析
质数判断
方法一
一个大于1的自然数,除了1和它本身外,不能被其他自然数(质数)整除(2, 3, 5, 7等),换句话说就是该数除了1和它本身以外不再有其他的因数。
也就是说,从2到n-1遍历,如果存在一个数是这个整数n的因数,那么它就不是质数。
但是这样做,时间复杂度会很高,当输入的整数比较大的时候,需要花费很长的时间。
n = int(input('输入一个整数:'))
if n>1:for i in range(2,n):if n%i==0:print(n,"不是质数")breakelse:print(n,"是质数")
else:print("1不是质数")
方法二
将方法一中的遍历范围缩小到[2,整数n的平方根],即开根号法:
假如一个数N是合数,它有一个约数a,那么有a×b=N
则a、b两个数中必有一个大于或等于根号N,一个小于或等于根号N。
因此,只要小于或等于根号N的数(1除外)不能整除N,则N一定是素数。
import math
n = int(input('输入一个整数:'))
if n>1:for i in range(2,math.floor(n**0.5)+1):if n%i==0:print(n,"不是质数")breakelse:print(n,"是质数")
else:print("1不是质数")
注意:这里用math.floor(n**0.5)+1
,保证能够取到平方根。
不能用math.ceil(n**0.5)
!
方法三
质数表法。
在方法二的基础上进一步缩小遍历范围。
方法二的遍历范围是从2到平方根。实际上,当我们确定n不能被2整除时,就不需要考虑4、6、8等情况了。也就是说,只需要考虑从0到平方根范围内的质数是不是整数n的因数。
这里用递归的方式实现取质数表。
n = int(input('输入一个整数:'))# 生成从2直到x的质数表
def PrimeList(x,old_list):if x>1:for i in old_list:if n%i==0:breakelse:old_list.append(x)P_list = [2,3,5,7] #已知的质数表if n==2 or n==3 or n==5 or n==7:print(n,"是一个质数")
else:k = int(n**0.5)for i in range(2,k+1):PrimeList(i,P_list)for i in P_list:if n%i==0:print(n,"不是一个质数")breakelse:print(n,"是一个质数")print(P_list)