使用 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 的冪”
- 如果 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
廣告
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP