猫史档案馆


素数计算4大改进

用户:炼金树枝炼金树枝查看:0 回复:0 评论:0 创建时间:2020-01-28T14:36:16


小学里,大家再也熟悉不过的就是素数(质数)了!这一次,让我来教大家用海龟写素数计算。

我们先用普通的算法:

import math
a=int(input())
c=0
print(str(a)+"以内的素数有:")
for i in range(2, a+1):
    # 素数为True
    ss = True
    for j in range(2, i):
        c+=1
        if (i % j == 0):
            ss = False
            break
    if (ss == True):
        print(i)
print("计算机算了"+str(c)+"次")

我们为了测试,我们输入1W,1W时会很卡,计算机打印出来的也很多,我们就把print(i)注释掉。

这一次,计算机算了5775223,约578W次。

i不必被 2 ~ i之间的每一个整数去除,只需被 2 ~ i的平方根 之间的每一个整数去除就可以了

import math
a=int(input())
c=0
print(str(a)+"以内的素数有:")
for i in range(2, a+1):
    # 素数为True
    ss = True
    for j in range(2, int(math.sqrt(i))+1):
        c+=1
        if (i % j == 0):
            ss = False
            break
    if (ss == True):
        pass
        #print(i)
print("计算机算了"+str(c)+"次")

sqrt是math库里的,所以开头要import math一下

我们还是用1W。

117527次,约12W。这一次还好。

我们定义一个list(列表)名字是L

每一次打印i之后L里面增加i

import math
a=int(input())
c=0
l=[]
print(str(a)+"以内的素数有:")
for i in range(2, a+1):
    # 素数为True
    ss = True
    for j in l:
        c+=1
        #print("j:",j)
        if (i % j == 0):
            ss = False
            break
        if j**2>=i:
            #ss=False
            break
    if (ss == True):
        l.append(i)
        #print(i)
print("计算机算了"+str(c)+"次")

还是1W

44981次,约4W

这就是本期的算法,如果有更好的算法,请在下方评论区评论。


回复

上一页1 页 / 共 0下一页