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)

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值