python 打印一定范围的素数(质数)

什么是素数(质数)

  • 素数(质数):因数只有自身和1的数
  • 0和1不是素数(质数)

这里通过for循环打印素数(质数)

x = int(input()) #假设输入的是30
y = [] #用来存储因数
for i in range(1,x+1):
    for j in range(1,i+1):
        if i % j == 0:#寻找i的因数并添加进y列表中
            y.append(j)
    if len(y) == 2:#判断y列表的长度是否等于2,如果等于2 则里面的因数必然为1和i
        print(i)#输出结果为 2, 3, 5, 7, 11, 13, 17, 19, 23, 29
    y.clear()#清空列表,开始下一次循环

以上代码虽然可以打印出任何范围的素数(质数),但是范围如果非常巨大的话,它的空间消耗会很大。所以这里改良了一下代码

数字因数的分布规律

  • 一个数的因数是平均分布在它的平方根两侧,它的因数或大于或小于或等于平方根
  • 如果数字a不是素数 ,那么a会有一个非1的因数b,使 a = b * c成立,如果b分布在a的平方根左侧,那么必然有一个因数分布在a的平方根右侧
  • 所以在判断a是否是素数,我们只检查2到a的平方根这个范围是否有a的因数即可,如果没有那a就是素数
from math import sqrt #导入sqrt函数

x = int(input()) #假设输入50

for i in range(2,x+1):
    isPrime = True #初始值为True
    for j in range(2,int(sqrt(i))+1):
        if i % j == 0: #判断i是否能被j整除,若能则isPrime = False 
            isPrime = False 
            #使用contine 占的运行空间消耗大所以使用break
            break # 结束内嵌循环
    if isPrime:
        print(i)

你可能感兴趣的:(python)