当前位置: 首页 > 知识库问答 >
问题:

从质因数中找出一个数的所有因数

姜乐语
2023-03-14

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

通过对小数位(496和28)进行测试,将质因数按特定顺序相乘,我实现了什么。然后,将这些数字相乘,几乎就能得到因数,但这并不太灵活,因为我只从一个小的质因数列表(1,2,3,5)中得到需要相乘的公式。

共有3个答案

夏侯航
2023-03-14

也许您正在寻找电源集中每个(唯一)设备的产品。因此,对于18=2*3*3,您需要{{}、{2}、}3}、[3]、{2,3},{2,3{、{3,3}{1、2、3、3、6、9、18}中每个集合的乘积。

鲍飞星
2023-03-14

如果将数字分解为素数的幂,如 p^a q^b r^c,则数字的可能因子是 0 ≤ x ≤ a、0 ≤ y ≤ b 和 0 ≤ r ≤ z 的所有数字。

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

闽阳州
2023-03-14

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

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]
 类似资料:
  • 假设n,a,b是正整数,其中n不是素数,因此n=ab和a≥b和(a)−b) 越小越好。如果给定n,找到a和b值的最佳算法是什么? 我读到了一个解决方案,他们试图通过搜索一个大于n的平方,将n表示为两个平方之间的差,这样S-n=(另一个平方)。为什么这比简单地找到n的素因子并搜索a,b是n的因子且a-b最小化的组合更好?

  • 我写了一个程序,将数字分解为它的质因数,然后将它们存储在一个向量中,最后询问是否通过将它们相乘来验证结果。 它的工作方式是这样的:要求一个数字(代码中的),然后将其除以2及以上。 如果它找到一个模(当mod时)为零的数字(代码中的 ),则将该除数存储到一个向量中,并将其除以 ,然后将其存储到 中,然后将除数重置为1(而 循环中的最后一条语句将其递增为2)。如果没有找到这样的数字, 将增加,直到它大

  • 问题如下:给定两个数字n和k。对于区间[1, n]中的每个数字,您的任务是计算其不可被k整除的最大除数。打印所有这些除数的和。注意:k始终是质数。t=3*10^5,1 我解决这个问题的方法是:对于1到n范围内的每个i,所需的除数是i本身,只有当i不是k的倍数时。如果i是k的倍数,那么我们必须找到一个数字的最大除数并与k匹配。如果不匹配,那么这个除数就是我的答案。否则,第二大除数就是我的答案。 例如

  • 我正在尝试自动查找一个数字与另一个数字的最接近因子; 示例: 700到30的最接近因子是28(30不等于700,但28等于700)。 一个显而易见的解决方案就是得到700的所有因子,并做一个简单的距离计算,找到离30最近的因子,但这似乎是低效的。 另一种解决方案是找到所有基本质因数,例如: 将这些数字相乘得到所有的组合,从而找到最接近的。 我正在尝试对其进行编程,使其自动化。有更好的解决方案吗?

  • 我找不到任何关于数学交换和堆栈溢出的问题来回答这个特定问题。这是我发现的最相似的问题,但这个问题构造得太差,答案完全不充分。 我尝试过在谷歌上寻找无济于事。我确实发现了这一点,但这个公式似乎效率低下,因此不够。例如,如果我们取数字21... 现在想象一下找到远大于21的数字的共同因素,例如2,252和4,082...上述方法没有任何效率。 我想做的是找出最有效的方法来找到任何两个数字的所有公因数。

  • 我有一些用于Euler项目的代码。求最大素因子600851475143。这需要很长时间才能完成,至少需要30分钟。你们能看出来是因为我的代码太长了,还是我的代码错了。还有,有什么让运行时间更快的提示吗?