使用 Python 检查 N 的任何排列是否等于 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_1 := 一个新的列表
    • temp_arr_2 := 一个新的列表
    • 当 n > 0 时,执行以下操作
      • 将 (n mod 10) 插入到 temp_arr_1 的末尾
      • n := n / 10 的向下取整值
    • 当 m > 0 时,执行以下操作
      • 将 (m mod 10) 插入到 temp_arr_2 的末尾
      • m := m / 10 的向下取整值
    • 如果来自 temp_arr_1 的新集合与来自 temp_arr_2 的新集合相同,则
      • 返回 True
    • 返回 False
  • 从主方法执行以下操作 -
  • power_array := 一个大小为 100 并初始化为 0 的新列表。
  • max_range := 10^18
  • power_array[0] := m
  • i := 1
  • 当 (power_array[i - 1] * m) < max_range 时,执行以下操作
    • power_array[i] := power_array[i - 1] * m
    • i := i + 1
  • 对于 j 从 0 到 i 的范围,执行以下操作
    • 如果 check_power(n, power_array[j]) 为 True,则
      • 返回“n 的一个全数字排列等于 m 的幂”
  • 返回“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

更新于: 2020-12-30

124 次查看

启动您的 职业生涯

通过完成课程获得认证

开始
广告