[英]How to get different factors from a list of prime numbers?
我一直在尝试问题 47 (欧拉项目),问题如下:
具有两个不同质因数的前两个连续数字是:
14 = 2 × 7
15 = 3 × 5
具有三个不同质因数的前三个连续数字是:
644 = 2² × 7 × 23
645 = 3 × 5 × 43
646 = 2 × 17 × 19.
找到前四个连续整数,每个整数都有四个不同的素因数。 这些数字中的第一个是什么?
这是我的方法:(您可能需要(pip)安装 sympy)
import time
import sympy
start=time.time()
a=list(sympy.primerange(1,101))
b=[]
for i in range(646,100000):
c=[]
for j in a:
if i%j==0:
c.append(j)
if len(c)==4:
s=[str(o) for o in c]
res=int("".join(s))
b.append(res)
else:
pass
else:
pass
print(b[:4])
end=time.time()
print(end-start)
我如何实现因素应该不同的逻辑? 我现在得到的答案(这显然是错误的)是:23511 正确答案是:134043
sympy 素数基本功能: https://www.geeksforgeeks.org/prime-functions-python-sympy
谢谢 !
好的,假设您有一个 function 可以为您提供主要因素
def find_4_diff(i):
fact_i = find_factors(i)
fact_i_plus_1 = find_factors(i+1)
if all([f_i not in f_i_plus_1 for i in fact_i]):
fact_i_plus_2 = find_factors(i+2)
if all([f_i not in f_i_plus_2 for i in fact_i]) and all([f_i not in f_i_plus_2 for i in fact_i_plus_1]):
fact_i_plus_3 = find_factors(i+3)
if all([f_i not in fact_i_plus_3 for i in fact_i]) and all([f_i not in fact_i_plus_3 for i in fact_i_plus_1]) and all([f_i not in fact_i_plus_3 for i in fact_i_plus_2]):
return i
return
i = 646
myval = find_4_diff(i)
while myval is None:
i += 1
myval = find_4_diff(i)
print(i)
现在您可以考虑优化的方法:例如,如果因子 i+1 与因子 i+2 无效,您总是至少计算 i+1 的因子,因此不需要再次计算(可以将其作为参数传递)你可以跳过 i+1 等
您所需要的只是一个将数字的因子作为数字返回的函数,例如 2 到 3 返回为 8 等
您的res
是因子的串联,而不是 4 个将i
均分的数字的乘积。 与其将 c 的元素转换为字符串并将它们连接起来,不如尝试b.append(prod(c))
,在其中 import prod
as from sympy.core.mul import prod
。 这样做, [2, 3, 5, 11] -> 330
而不是23511
。
顺便说一句, len(sympy.factorint(n)) == 4
会告诉你n
是否有 4 个不同的因素。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.