使用 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
广告