使用椭圆曲线分解(在Python中)我能够在~0.5秒内找到50位数的PRIME因子。有什么方法可以将素数因子转换为数字因子吗?
我通过测试小数字(496和28),将素数因子按特定顺序相乘来实现。然后乘以这些数字几乎给了我一些因子,但它不是很灵活,因为我只得到了我需要从一小部分素数因子(1,2,3,5)中加起来的公式。
答案 0 :(得分:2)
这是我的版本,它计算了一系列素因子的幂集的元素产品,只保留那些独特的产品:
def divisors(n, fs=[]):
if fs == []: fs = factors(n)
divs = [1]
for f in fs:
temp = divs[:]
for d in divs:
if f * d not in temp:
temp.append(f*d)
divs = temp
return sorted(divs)
这就是行动:
>>> factors(496)
[2, 2, 2, 2, 31]
>>> divisors(496)
[1, 2, 4, 8, 16, 31, 62, 124, 248, 496]
>>> factors(28)
[2, 2, 7]
>>> divisors(28)
[1, 2, 4, 7, 14, 28]
答案 1 :(得分:1)
如果数量被考虑到素数的幂,如p ^ aq ^ br ^ c那么数量的可能因子是形式p ^ xq ^ yr ^ z的所有数量,0≤x≤a,0≤ y≤b,0≤r≤z。
由于你可以有不同数量的素数因子,这是一个小编程问题。玩得开心。
答案 2 :(得分:0)
也许您正在寻找powerset中每个(唯一)设置的产品。因此,对于18=2*3*3
,您需要{{},{2},{3},{3},{2,3},{2,3},{3,3},{2,3,3}}
中每个集合的产品,并为您提供{1, 2, 3, 3, 6, 9, 18}
。
答案 3 :(得分:0)
你可以使用这样的sympy模块:
import sympy
sympy.ntheory.factorint(4960) #Factorization.
sympy.ntheory.divisors(4960) #List all divisors.