检查 N 的任何排列是否等于 Python 中 K 的任何幂

假设,我们有两个正整数 n 和 m,使得 2 ≤ n ≤ 1018 和 2 ≤ m ≤ n。我们的目标是找出数字 n 是否存在任何全数字排列;所以它等于 m 的某个幂。如果有,我们就说存在一个 n 的全数字排列,它等于 m 的一次幂,否则我们说之前的陈述为假。

例如,给定 n = 7182 和 m = 12。由于 1728 是 7182 和 1728 = 12^3 的全数排列,我们声明 n 的全数排列等于 m 的幂.

所以,如果输入像 n=7182,m=12;那么输出将是“n 的所有数字排列等于 m 的幂”。

为了解决这个问题,我们将按照以下步骤操作 -

  • 定义一个函数check_power()。这将需要 n, m

    • 返回真

    • 在 temp_arr_2 的末尾插入 (m mod 10)

    • m := m / 10 的底值

    • 在 temp_arr_1 的末尾插入 (n mod 10)

    • n := n / 10 的底价

    • temp_arr_1 := 一个新列表

    • temp_arr_2 := 一个新列表

    • 当 n > 0 时,做

    • 当 m > 0 时,做

    • 如果来自 temp_arr_1 的新集合与来自 temp_arr_2 的新集合相同,则

    • 返回错误

    • 从主要方法执行以下操作 -

    • power_array := 大小为 100 的新列表,初始化为 0。

    • 最大范围:= 10^18

    • power_array[0] := m

    • 我:= 1

    • 而 (power_array[i - 1] * m) < max_range,做

      • power_array[i] := power_array[i - 1] * m

      • 我 := 我 + 1

    • 对于 0 到 i 范围内的 j,执行

      • return "n 的所有数字排列等于 m 的幂"

      • 如果 check_power(n, power_array[j]) 为 True,则

    • 返回“并非所有 n 的数字排列都等于 m 的幂”

    让我们看看以下实现以获得更好的理解 -

    示例

    def check_power(n, m):
       temp_arr_1 = []
       temp_arr_2 = []
       while (n > 0) :
          temp_arr_1.append(n % 10)
          n //= 10
       while (m > 0) :
          temp_arr_2.append(m % 10)
          m //= 10
       if (set(temp_arr_1) == set(temp_arr_2)):
          return True
       return False
    def solve(n, m):
       power_array = [0] * 100
       max_range = pow(10, 18)
       power_array[0] = m
       i = 1
       while (power_array[i - 1] * m < max_range) :
          power_array[i] = power_array[i - 1] * m
          i += 1
       for j in range(i):
          if (check_power(n, power_array[j])) :
             return "An all digit-permutation of n is equal to a power of m"
       return "No all digit-permutation of n is equal to a power of m"
    n, m = 7182, 12
    print(solve(n, m))

    输入

    7182, 12
    输出结果
    An all digit-permutation of n is equal to a power of m

    猜你喜欢