【算法练习】——求10万以内的素数

本文探讨了多种优化算法来找出10万以内的素数,从基础写法到逐步改进,包括跳过偶数、限制内循环范围、排除特定个位数、利用6的倍数性质等,最终实现高效求解,运行时间缩短至0.11秒左右。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. #基础写法,效率慢
import datetime

start = datetime.datetime.now()

prime_number = []
n = 100000
for i in range(2, n):
    for j in range(2,i):
        if i%j == 0:
            break
    else:
        prime_number.append(i)
        
t_time = (datetime.datetime.now()-start).total_seconds()
print('用时:{}s,{}内的素数一共有{}个'.format(t_time, n, len(prime_number)))
print(prime_number)

用时:49.140267s,100000内的素数一共有9592个

改进1.

除了2 的偶数都不是素数 ,所以将2直接放在列表中,第7行改为for i in range(3,n,2),将步长设为2,跳过所有偶数;同时因为奇数不能被偶数整队,所以将第8行改成for j in range(3, i, 2)

import datetime

start = datetime.datetime.now()

prime_number = [2]
n = 100000
for i in range(3, n, 2):
    for j in range(3, i, 2):
        if i%j == 0:
            break
    else:
        prime_number.append(i)
        
t_time = (datetime.datetime.now()-start).total_seconds(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值