algorithm - 将大数分解为三元组

标签 algorithm math

我发现了类似的问题,但这有点复杂。

我有一个很大的数n(我其实还有很多,不过现在无所谓了),(>40位),想求a*b*c=n个三元组。 n 的质因数分解完成。它没有大素数,但有许多小素数。所有质数除数(包括倍数除数)之和大于 50。

我想找到 a*b*c=n 个三元组,其中 a<=b<=c。我不想要所有的三胞胎,因为它们太多了。我正在寻找特别的。

例如:

  • c-a 最小的三元组,
  • c/a 最小的三元组,
  • a,b,c 有最大公约数的那一个,
  • 结合这些条件。

如果我们知道 n=k!(阶乘),这会更容易解决。解决可能会导致一个通用的方法。 由于 n 的大小,用蛮力计算所有这些三元组不是一种选择,所以我需要一个好的算法或一些特殊工具来帮助我为此实现解决方案。

抱歉我的英语不好,

感谢您的回答!

最佳答案

您可以通过一个简单的 O(|D|^2) 来实现它算法,其中 D是除以 n 的所有数字的有序列表,你已经拥有了。

请注意,您只需找到 a,b ,因为 c=n/(a*b) ,所以问题归结为找到所有对 (a,b)D这样a<bn/(a*b) ∈ D .

伪代码:

result = empty_list
for (int i=0; i<D.size-1, i++) {          // O(|D|)
    for (j=i+1; j<D.size, j++) {          // O(|D|)
         a, b = D[i], D[j]
         c = n/(a*b)
         if (D.contains(c) && c>b) {      // O(1)
             result.append( (a,b,c) )
         }
    }
}                                         // O(|D|)*O(|D|)=O(|D|^2)

关于algorithm - 将大数分解为三元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15386658/

相关文章:

java - 坚持在一般树遍历中寻找最深路径试图找到最大的公共(public)子串

c++ - 生成 Catmull Rom 样条并返回垃圾

math - float 学被破坏了吗?

java - 在 Java 中生成加起来为 100 的 12 个数字的所有组合的有效方法

php - 生成不同的组合 PHP

algorithm - 一种算法,看看图中是否恰好有两个MST?

algorithm - 寻找算法来寻找参数以满足给定函数的返回

java - 根据可用空间计算所需的列数和行数

python - Sympy nsolve 函数和多个解决方案

unit-testing - 测试面向数学的方法的正确性