从素数因子

时间:2015-12-11 12:25:48

标签: math factors

使用椭圆曲线分解(在Python中)我能够在~0.5秒内找到50位数的PRIME因子。有什么方法可以将素数因子转换为数字因子吗?

我通过测试小数字(496和28),将素数因子按特定顺序相乘来实现。然后乘以这些数字几乎给了我一些因子,但它不是很灵活,因为我只得到了我需要从一小部分素数因子(1,2,3,5)中加起来的公式。

4 个答案:

答案 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.