PythonでNの順列がKの累乗に等しいかどうかを確認します
2≤n≤1018および2≤m≤nのように、2つの正の整数nおよびmがあるとします。私たちの目標は、数値nの全桁順列があるかどうかを調べることです。 mの累乗に等しくなるようにします。存在する場合は、mの累乗に等しいnの全桁順列が存在することを示し、そうでない場合は、前のステートメントをfalseとして示します。
たとえば、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の場合、do
- temp_arr_1の最後に(n mod 10)を挿入します
- n:=n/10のフロア値
- m> 0の場合、do
- temp_arr_2の最後に(m mod 10)を挿入します
- m:=m/10のフロア値
- temp_arr_1からの新しいセットが、temp_arr_2からの新しいセットと同じである場合、
- Trueを返す
- Falseを返す
- メインの方法から次のようにします-
- power_array:=0で初期化されたサイズ100の新しいリスト。
- max_range:=10 ^ 18
- power_array [0]:=m
- i:=1
- while(power_array [i-1] * m)
- power_array [i]:=power_array [i-1] * m
- i:=i + 1
- check_power(n、power_array [j])がTrueの場合、
- return"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
-
Pythonでの次の順列
次の順列メソッドを実装したいとします。そのメソッドは、辞書式順序で次に大きい数の順列に数値を再配置します。そのような配置が不可能な場合、このメソッドはそれを可能な限り低い順序として再配置します(つまり、実際には昇順でソートされます)。交換はインプレースで行う必要があり、余分なメモリを使用しないでください。たとえば、入力が左側の列にあり、対応する出力が右側の列にある場合。 1,2,3 → 1,3,2 3,2,1 → 1,2,3 1,1,5 → 1,5,1 手順を見てみましょう- found:=false、i:=配列の長さ– 2 =0 A [i]
-
Pythonの3の力
番号nがあるとします。数が3の累乗であるかどうかを確認する必要があります。したがって、数値がn =27、つまり3の累乗のような場合、結果はtrueになり、n =15の場合、falseになります。 これを解決するには、次の手順に従います- これを解決するために対数を使用します [log10(n)/ log10(3)] mod 1 ==0の場合、3の累乗になります。それ以外の場合は、そうではありません 例 理解を深めるために、次の実装を見てみましょう- class Solution(object): def isPowerOfThree(self, n): &n