代码之家  ›  专栏  ›  技术社区  ›  whacko__Cracko

计算具有相同结果的给定指数对的不同项

  •  1
  • whacko__Cracko  · 技术社区  · 16 年前

    为了理解这个问题,让我们首先考虑以下示例:

    4个 =(2个 2个 6个 =2个 德意志北方银行 =(2个 ) 4个 =8个 4个 =16个 =4096个 .

    4个 6个 ,2个 德意志北方银行 4个 和16 都一样。

    27个 =3个 =19683个

    所以,两者 27个 和3 9个

    现在的问题是,对于任何给定的 是的 = 是的 可以在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 No duplicate possible

    5 回复  |  直到 16 年前
        1
  •  5
  •   Dietrich Epp    16 年前

    这主要是一道数学题。你可以提取一个数的所有素数因子,得到一个素数及其指数的列表,即216000=2 6个 *5个 . 然后取指数的GCD:GCD(6,3,3)=3。把指数除以GCD得到这个数的最小根,2 *3个 1个 1个 =60。然后因子3的GCD因子为1和3。有一种方法可以将该数字表示为GCD的每个因子的整数幂。你可以用(60)来表示 1个 或(60 1个 .

    编辑:修正了数学错误。

        2
  •  2
  •   Eli Bendersky    16 年前

    你甚至有一个方便的停止条件-当根低于2时,你可以停止。也就是说,算法:

    • 给出结果
      • 如果是整数:添加到答案
      • 如果是<2,退出循环
    • N+=1,返回上一步

    此算法将始终终止。

        3
  •  1
  •   Nick Dandoulakis    16 年前

    我相信这个问题相当于 Integer factorization 问题。

    我这么说是因为我们可以把任何复合数转换成素数的唯一乘积
    (见 Fundamental theorem of arithmetic )然后开始创造与因素和力量的组合。

    更新: 4个 6个

    我们把它转化为素因子的幂 2个 .
    6个 ,8个 4个 ... 直到指数变成1。

        4
  •  0
  •   Carl Smotricz    16 年前

    给定结果,可以确定可能的最大指数。

    这也适用于不是2:19683的幂大于2^14的结果,所以你不会看到任何大于14的指数。

    现在你可以取你的数字,从上指数向2(最小指数)递减。对于每个试验指数exp,取结果的exp th根;如果它是一个干净的整数,那么您就找到了一个解决方案。

    这种方法的优点是,一旦设置好了,就可以运行一个简单的循环,完成后就可以得到所有的结果。

        5
  •  0
  •   whacko__Cracko    16 年前

    最后我自己解决了这个问题。使用一个简单的整数分解算法,我的解决方案看起来像 this Pollard's rho algorithm

    编辑: