【问题标题】:How do I make the code shorter and more efficent?如何使代码更短、更高效?
【发布时间】:2021-08-04 13:00:15
【问题描述】:
import time
start_time = time.time()
a = [2]
inp = 2
while inp < 60000:
    div = 2
    inp += 1
    while div <= (inp / 2 + 1):
        prime = inp / div
        if prime.is_integer() == True:
            break
        else:
            if div >= (inp / 2):
                a.append(str(inp))
                break
            else:
                div += 1

print(a)
print(len(a))
print("Process finished --- %s seconds ---" % (time.time()-start_time))

我编写了自己的第一个程序来计算 0 到 60000 之间的每个素数。我正在寻找如何更好地格式化或改进它的技巧。

【问题讨论】:

标签: python performance


【解决方案1】:
import math
n = 60000
primes = []
for k in range(2,n):
    if k % 2 == 0 and k > 2: 
        pass
    elif all(k % i for i in range(3, int(math.sqrt(k)) + 1, 2)):
        print(k)

编辑

由于偶数除了2之外都不是素数,所以我再次修改了答案

import math
primes2 = [2]
for k in range(3,n,2):
    if all(k % i for i in range(3, int(math.sqrt(k)) + 1, 2)):
        primes2.append(k)

或衬垫(它也将有助于性能)

from math import sqrt # Most efficient way to use external libraries
primes = [k for k in range(3,n+1,2) if all(k % i for i in range(3, int(sqrt(k)) + 1, 2))]
primes.insert(0, 2)
# To print
print(*[k for k in range(3,n+1,2) if all(k % i for i in range(3, int(sqrt(k)) + 1, 2))],sep='\n')

【讨论】:

    【解决方案2】:

    这就是我会做的事情

    def isPrime(n) :
        if (n <= 1) :
            return False
        if (n <= 3) :
            return True
        if (n % 2 == 0 or n % 3 == 0) :
            return False
        i = 5
        while(i * i <= n) :
            if (n % i == 0 or n % (i + 2) == 0) :
                return False
            i = i + 6
        return True
    
    def printPrime(n):
        for i in range(2, n + 1):
            if isPrime(i):
                print (i, end =" ")
    
    n = 60000  <--- you can change n by any value you want        
    printPrime(n)
    

    【讨论】:

    • 如果你想让它更短,你可以删除前 3 个 if,但是你没有任何错误处理,所以我建议留下它们以防万一
    • 您的代码非常好,但我建议为您所做的一切添加一个函数,以便您可以在需要时调用该函数,但它并不总是被执行。除此之外还不错
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-24
    • 2019-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-31
    相关资源
    最近更新 更多