python 6857
取约数算法优化 只取质数 记录取到的约数 i 下次取约数从 i 开始
手写个轮子用来计时 优化效果很有限 可能要更大的数才见效
>>> timef(p3(),number=10000)
0.0010133860000109962
>>> timef(p3_mix(),number=10000)
0.000952252999979919
def p3_mix():
import math
a = 600851475143
def p3_get_prime(n):
return int(3*n+1+(math.sin(math.pi*n/2))**2)
def is_prime(n):
if not n%2:
return False
n1 = int(math.sqrt(n))
for i in range(3,n1+1,2):
if not n%i:
return False
return True
def p3_1_mix(n,num=1,i=2):
if is_prime(n):
return n
while i < a//2+1:
if not n%i: # n被i整除
return p3_1_mix(n/i,num,i)
else: # n无法被i整除
if i == 2:
i = 3
elif i == 3:
i = p3_get_prime(num)
else:
num += 1
i=p3_get_prime(num)
print(p3_1_mix(a))
|