Math 从素数因子中找出一个数的所有因子

Math 从素数因子中找出一个数的所有因子,math,factors,Math,Factors,使用椭圆曲线分解(在Python中),我能够在0.5秒内找到50位数字的素因子。有没有办法把素数因子转换成数的因子 通过对小数字(496和28)进行测试,将基本因子按特定顺序相乘,我了解到了这一点。然后将这些数字相乘几乎可以得到因子,但它不是很灵活,因为我只从一小部分素数因子(1,2,3,5)中得到了相乘所需的公式。也许你在寻找幂级数中每个(唯一)集的乘积。因此,对于18=2*3*3您需要{{}、{2}、{3}、{3}、{2,3}、{2,3}、{3,3}、{2,3,3}}中每个集合的乘积,给您{

使用椭圆曲线分解(在Python中),我能够在0.5秒内找到50位数字的素因子。有没有办法把素数因子转换成数的因子


通过对小数字(496和28)进行测试,将基本因子按特定顺序相乘,我了解到了这一点。然后将这些数字相乘几乎可以得到因子,但它不是很灵活,因为我只从一小部分素数因子(1,2,3,5)中得到了相乘所需的公式。

也许你在寻找幂级数中每个(唯一)集的乘积。因此,对于
18=2*3*3
您需要
{{}、{2}、{3}、{3}、{2,3}、{2,3}、{3,3}、{2,3,3}}
中每个集合的乘积,给您
{1,2,3,3,6,9,18}
也许您正在寻找动力集中每个(唯一)集合的乘积。因此,对于
18=2*3*3
您需要
{{}、{2}、{3}、{3}、{2,3}、{2,3}、{3,3}、{2,3,3}
中每个集合的乘积,给您
{1,2,3,3,6,9,18}
以下是我的版本,它计算出素因子集合的幂集的元素乘积,只保留那些唯一的乘积:

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]

这是我的版本,它计算一组基本因子的powerset的元素级乘积,只保留那些唯一的乘积:

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]

如果数字被分解成素数的幂,比如p^a q^b r^c,那么数字的可能因子都是形式为p^x q^y r^z的0的数字≤ x≤ a、 0≤ Y≤ b、 和0≤ R≤ z


因为你可以有不同数量的素数因子,这是一个小的编程问题。玩得开心

如果这个数字被分解成素数的幂,比如p^a q^b r^c,那么这个数字的可能因子就是0的所有p^x q^y r^z形式的数字≤ x≤ a、 0≤ Y≤ b、 和0≤ R≤ z


因为你可以有不同数量的素数因子,这是一个小的编程问题。玩得开心

您可以像这样使用sympy模块:

import sympy
sympy.ntheory.factorint(4960) #Factorization.
sympy.ntheory.divisors(4960) #List all divisors.

您可以像这样使用Symphy模块:

import sympy
sympy.ntheory.factorint(4960) #Factorization.
sympy.ntheory.divisors(4960) #List all divisors.

嗨,很抱歉回复得很晚,我上学了。你能解释一下每一步的作用吗。我对div和fs代表什么有点困惑。谢谢你的帮助!除数的累加列表在
divs
中,
fs
是n的因子。您没有问,但是
temp
divs
的副本,因此
divs
可以在内部循环中使用。您好,很抱歉回复太晚,我上学了。你能解释一下每一步的作用吗。我对div和fs代表什么有点困惑。谢谢你的帮助!除数的累加列表在
divs
中,
fs
是n的因子。您没有询问,但是
temp
divs
的副本,因此可以在内部循环中使用
divs