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

Pythonで多数の順列が8で割り切れるかどうかを確認します


膨大な数が提供され、その数の桁の順列が8で割り切れるかどうかを調べる必要があるとします。この数は文字列形式で提供されます。

したがって、入力が次のようになっている場合:input_num =4696984、出力は「8で割り切れる」になります。

この問題を解決するために、数字の数字で可能なすべての3桁の順列をチェックし、それらが数字のすべての数字の順列で発生する可能性があるかどうかを確認します。数値の全桁順列の最後に8で割り切れる3桁の順列が発生した場合、順列は8で割り切れると言います。

これを解決するには、次の手順に従います-

  • input_numの長さが3未満の場合、
    • input_num mod 8が0と同じ場合、
      • Trueを返す
    • input_num:=input_numの逆
    • input_num mod 8が0と同じ場合、
      • Trueを返す
    • Falseを返す
  • temp_arr:=0で初期化されたサイズ10の新しいリスト。
  • 0からinput_numのサイズまでのカウントについては、次のようにしてください
  • temp_arr [input_num [count]-0]:=temp_arr [input_num [count]-0] + 1
  • 104から999の範囲のカウントの場合、8ずつ増やします。
    • temp:=count
    • 発生:=0で初期化されたサイズ10の新しいリスト。
    • occurences [temp mod 10]:=occurences [temp mod 10] + 1
    • temp:=temp / 10
    • occurences [temp mod 10]:=occurences [temp mod 10] + 1
    • temp:=temp / 10
    • occurences [temp mod 10]:=occurences [temp mod 10] + 1
    • temp:=count
    • 発生した場合[tempmod10]> temp_arr [temp mod 10]、
      • 次の反復に進む
    • temp:=temp / 10
    • 発生した場合[tempmod10]> temp_arr [temp mod 10]、
      • 次の反復に進む
    • temp:=temp / 10
    • 発生した場合[tempmod10]> temp_arr [temp mod 10]、
      • 次の反復に進む
    • Trueを返す
  • Falseを返す

理解を深めるために、次の実装を見てみましょう-

def solve(input_num):
   if len(input_num) < 3:
      if int(input_num) % 8 == 0:
         return True
      input_num = input_num[::-1]
      if int(input_num) % 8 == 0:
         return True
      return False
   temp_arr = 10 * [0]
   for count in range(0, len(input_num)):
      temp_arr[int(input_num[count]) - 0] += 1
   for count in range(104, 1000, 8):
      temp = count
      occurences = 10 * [0]
      occurences[int(temp % 10)] += 1
      temp = temp / 10
      occurences[int(temp % 10)] += 1
      temp = temp / 10
      occurences[int(temp % 10)] += 1
      temp = count
      if (occurences[int(temp % 10)] >
         temp_arr[int(temp % 10)]):
         continue
      temp = temp / 10
      if (occurences[int(temp % 10)] >
         temp_arr[int(temp % 10)]):
         continue
      temp = temp / 10
      if (occurences[int(temp % 10)] >
         temp_arr[int(temp % 10)]):
         continue
         return True
      return False
if solve("4696984"):
   print("Divisible by eight")
else:
   print("Not divisible by eight")

入力

4696984

出力

Divisible by eight

  1. Pythonで多数が17で割り切れるかどうかを確認します

    ある番号が与えられ、その番号が17で割り切れるかどうかを確認する必要があるとします。 したがって、入力が99943のような場合、出力は除算されます。 この問題は、繰り返し減算法を使用して解決します。この方法では、数値の最後の桁を抽出し、17で割り切れる2桁の数値が得られるまで、数値から5回減算します。 これを解決するには、次の手順に従います- 数値は100で割り切れますが、 last_digit:=number mod 10 数値:=(数値を10で割った値)のフロア値 number:=number --last_digit * 5 数値mod17が0と同じ場合はtrueを返

  2. Pythonで数値がアキレス数であるかどうかを確認します

    数nがあるとします。 nがアキレス数であるかどうかを確認する必要があります。私たちが知っているように、数は強力な数の場合はアキレス数です(数Nは、その素因数pごとに、p ^ 2もそれを除算する場合、強力な数と呼ばれます)が、完全なべき数ではありません。アキレス数の例には、72、108、200、288、392、432、500、648、675、800、864、968、972、1125があります。 したがって、入力が108のような場合、6と36の両方がそれを分割し、完全な正方形ではないため、出力はTrueになります。 これを解決するには、次の手順に従います- 関数check_powerful(