Python
 Computer >> コンピューター >  >> プログラミング >> Python

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
  • 0からiの範囲のjについては、
    • check_power(n、power_array [j])がTrueの場合、
      • return"nの全桁順列はmの累乗に等しい"
  • 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

    1. 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]

    2. 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