几种方法求10万以内素数算法的用时小测试

1、使用while循环,不对算法做任何优化

import datetime
start = datetime.datetime.now()
a = 2
while a < 100000:
    i = 2
    while i < a:
        if a % i == 0:
            break
        i += 1
    #else:
        #print(a)
    a += 1
usetime = (datetime.datetime.now() - start).total_seconds()
print(usetime)

总共用时90.5秒
2、使用for循环,也不做任何优化

import datetime
start = datetime.datetime.now()
for a in range(2,100000):
    for i in range(2,a):
        if a % i == 0:
            break
usetime = (datetime.datetime.now() - start).total_seconds()
print(usetime)
    #else:
        #print(a,end=',')

用时55.9秒
3、使用for循环,进行开根号的优化

import math,datetime
start = datetime.datetime.now()
for a in range(2,100000):
    for i in range(2,int(math.sqrt(a))+1):
        if a % i == 0:
            break
usetime = (datetime.datetime.now() - start).total_seconds()
print(usetime)
    #else:
        #print(a,end=',')

用时0.419秒
4、使用for循环,在开根号的基础上进行进一步优化

import datetime
start = datetime.datetime.now()
#print(2,end=',')
for n in range(3,100000,2):
    if n > 10 and n % 10 == 5:
        continue
    else:
        for a in range(2,int(n**0.5)+1):
            if n % a == 0:
                break
usetime = (datetime.datetime.now() - start).total_seconds()
print(usetime)
        #else:
            #print(n,end=',')

用时0.37秒

可以看出算法优化对程序运行效率的提升巨大,而且这里使用for循环比while循环的效率要更高

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值