c++ - 计算具有相同结果的给定对幂的不同项

标签 c++ c algorithm math

为了理解这个问题,让我们首先考虑这些例子:

46 = (22)6 = 212 = (23)4 = 84 = 163 = 4096

因此,我们可以说 46,212,84 和 163 相同。

273 = 39 = 19683

因此,273 和 39 是相同的。

现在的问题是,对于任何给定的 ab 对,如何计算所有其他可能的(如果有的话)xy 其中,ab = xy。我对一个算法感兴趣可以在 C/C++ 中高效地实现。

例如:

如果输入是这样的:

4,6 所需的输出:(2,12),(8,4)

8,4 所需的输出:(2,12),(2,6)

27,3 所需的输出:(3,9)

12,6 所需输出:(144,3),(1728,2)

7,5 所需输出:不可能重复

最佳答案

这主要是一道数学题。您可以提取一个数的所有质因数,然后您将得到一个质数及其指数列表,即 216000 = 26 * 33 * 5 3。然后取指数的 GCD:GCD(6,3,3) = 3。将指数除以 GCD 得到数字的最小根,22 * 31 * 51 = 60。然后因式分解 GCD — 3 的因数为 1 和 3。有一种方法可以将数字表示为 GCD 的每个因数的整数幂。您可以将其表示为 (603)1 或 (601)3

编辑:修复了数学错误。

关于c++ - 计算具有相同结果的给定对幂的不同项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2152993/

相关文章:

c++ - 当变量达到最大值时,unsigned int 的递增会导致未定义的行为吗

c - 在信号处理的上下文中,究竟哪些变量需要是 sig_atomic_t?

algorithm - RGB => HSL => 色调范围名称转换算法关闭正 60 度

algorithm - 如何使用分布排序(基数排序等)对字符串进行排序?

c - 如何保护 RCU 阅读器部分免于抢占?

c++ - 如何在 C 或 C++ 的 O(n) 中删除数组中的重复元素?

c++ - 在 C++ 中使用多重继承进行转换

c++ - 如何对间隔进行二进制搜索

c - 在 C 中快速复制数组的选定元素?

c++ - c++ 返回多个值