检查 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的末尾插入(mmod10)
m:=m/10的底值
在temp_arr_1的末尾插入(nmod10)
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)
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