Math 从素数因子中找出一个数的所有因子
使用椭圆曲线分解(在Python中),我能够在0.5秒内找到50位数字的素因子。有没有办法把素数因子转换成数的因子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}}中每个集合的乘积,给您{
通过对小数字(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
。