检查 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