P5723 【深基4.例13】质数口袋Python3实现

刚学Python的菜狗


a=int(input())
b=list()
n=0
sum=0
if a!=1:
    for i in range(2, a + 1):
        b.append(i)
    for i in range(0, a):
        c = 2
        while c < b[i]:
            s = b[i] % c
            if s == 0:
                break
            else:
                c += 1
        if b[i] == c:
            sum += b[i]
            if sum <= a:
                print(b[i])
                n += 1
            else:
                break
        i += 1
        if i >= len(b):
            break
    print(n)
else:
    print(0)

先把2到输入的数字用循环存入列表,然后挨个判断是否为质数,时间复杂度高.

优化后

def is_prime(n):
    # 判断一个数是否为质数
    if n < 2:  # 小于 2 的数不是质数
        return False
    for i in range(2, int(n**0.5) + 1):  # 遍历 2 到 sqrt(n) 的范围
        if n % i == 0:  # 如果存在能整除 n 的数,n 不是质数
            return False
    return True  # 否则,n 是质数

L = int(input())  # 输入 L 的值

pocket = []  # 存放质数的口袋
total_sum = 0  # 当前口袋内质数的和

for num in range(2, L+1):  # 从 2 开始到 L 进行遍历
    if is_prime(num):  # 判断 num 是否为质数
        if total_sum + num <= L:  # 如果当前质数总和加上 num 小于等于 L
            pocket.append(num)  # 将 num 添加到口袋中
            total_sum += num  # 更新质数总和
        else:
            break  # 如果超过 L,跳出循环

for prime in pocket:
    print(prime)  # 输出口袋中的质数

print(len(pocket))  # 输出口袋中质数的个数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值