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
在这段代码中,我试图创建一种使用素数生成数字除数的最快方法。我需要测试10*8的数字。但是除数生成函数存在一些问题,而且速度太慢。如何提高代码的速度您不需要预先计算所有素数,只需将所有可能的除数(即使是非素数)从2迭代到sqrt(N),速度就会大大提高: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
[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)