使用 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 次檢視

啟動您的 職業生涯

透過完成課程獲得認證

開始
廣告

© . All rights reserved.