Python 使用素数表的整数分解(尝试寻找最快的算法) 从itertools导入压缩 def素数(n): sieve=bytearray([True])*(n//2+1) 对于范围(1,int(n**0.5)//2+1)内的i: 如果[i]: 筛子[2*i*(i+1)::2*i+1]=bytearray((n//2-2*i*(i+1))//(2*i+1)+1) 返回{2,*compress(范围(3,n,2),sieve[1:])} 素数列表=素数(10**8) def除数发生器(num): ''生成输入num''的除数' gen=[] number=num 对于i在素数的列表中: 当num%i==0时: 如果i

Python 使用素数表的整数分解(尝试寻找最快的算法) 从itertools导入压缩 def素数(n): sieve=bytearray([True])*(n//2+1) 对于范围(1,int(n**0.5)//2+1)内的i: 如果[i]: 筛子[2*i*(i+1)::2*i+1]=bytearray((n//2-2*i*(i+1))//(2*i+1)+1) 返回{2,*compress(范围(3,n,2),sieve[1:])} 素数列表=素数(10**8) def除数发生器(num): ''生成输入num''的除数' gen=[] number=num 对于i在素数的列表中: 当num%i==0时: 如果i,python,Python,在这段代码中,我试图创建一种使用素数生成数字除数的最快方法。我需要测试10*8的数字。但是除数生成函数存在一些问题,而且速度太慢。如何提高代码的速度您不需要预先计算所有素数,只需将所有可能的除数(即使是非素数)从2迭代到sqrt(N),速度就会大大提高: [2,2,3,3,3,3,5] from itertools import compress def prime_number(n): sieve = bytearray([True]) * (n//2+1) for i i

在这段代码中,我试图创建一种使用素数生成数字除数的最快方法。我需要测试10*8的数字。但是除数生成函数存在一些问题,而且速度太慢。如何提高代码的速度

您不需要预先计算所有素数,只需将所有可能的除数(即使是非素数)从2迭代到sqrt(N),速度就会大大提高:

[2,2,3,3,3,3,5]

from itertools import compress


def prime_number(n):
    sieve = bytearray([True]) * (n//2+1)
    for i in range(1,int(n**0.5)//2+1):
        if sieve[i]:
            sieve[2*i*(i+1)::2*i+1] = bytearray((n//2-2*i*(i+1))//(2*i+1)+1)
    return {2,*compress(range(3,n,2), sieve[1:])}


list_of_primes = prime_number(10**8)

def divisor_generator(num):
    '''Generates the divisiors of input num'''
    gen = []
    number = num
    for i in list_of_primes:
        while num % i == 0:
            if i < num //2:
                gen.append(num // i)
                gen.append(number // (num //i))
                num = num // i
            else:
                break
    return sorted([1, *gen, number])
from math import sqrt

a = 1620
temp = a
divisors = []

# The largest possible divisor is equal to sqrt(a)
for i in range(2, int(sqrt(a)) + 1):
    while temp % i == 0:
        temp = temp // i
        divisors.append(i)
        print(i)
    if temp == 1:
        break
print(divisors)