【Python】約数の列挙

Python約数を列挙させるプログラムについて紹介します。



約数とは

整数aが整数bで割り切れる、つまりa = b * cであるときbはaの約数であるといいます。

例えば整数8の約数は1,2,4,8の4個です。

約数を列挙させるコード

コード例


# 打ち込んだ整数の約数を列挙

divisor = int(input('整数 : '))

for i in range(1, divisor + 1):
  if divisor % i:
    continue
  print(i, end=' ')

実行結果

整数 : 36
1 2 3 4 6 9 12 18 36

1文ずつ内容の解説をします。

divisor = int(input('整数 : '))

キーボードから入力された数字文字列をint関数でint型に変換し変数divisorに代入しています。

キーボードから入力されるのは数字文字列のstr型でこのままでは数値として扱えないのでint関数でint型に変換する必要があります。

今回の場合は数字文字列’36’をint型36に変換しています。

for i in range(1, divisor + 1):

並び式(range(1, divisor + 1))に含まれる値を変数iに取り出して、スイート(下のインデントが一段深い文)を実行します。

range(a, b)が生成するのはa以上b未満の数列なのでbに当たるdivisorに1を加えています。

aを省略すると0から始まってしまい約数は1から始まるのでaを1にしています。

if divisor % i: continue

for文により取り出された変数iから約数の条件を満たす整数を抽出します。

約数は割り切れるので逆に割り切れない値は約数ではありません。

なのでdivisorを割った際にあまりがある整数をここで見つけています。

continueはループの後ろの文をスキップして判定式(for文)に戻ります。

後ろの文つまりprint関数の文をスキップするので約数でない整数は表示されなくなります。

なおif文などの複合文で制御する単純文(今回の場合はcontinue)はコード例のように改行せずに:の後ろにおいてもいいです。

print(i, end=’ ')

if文で選別された約数をprint関数で列挙しています。

end=’ 'により約数の1つ1つの後ろにスペース文字を出力させています。



辺と面積が整数値である長方形

約数の列挙の応用として辺と面積が整数となる長方形の辺の長さを列挙するプログラムを作ります。

なお短辺と長辺は区別しないものとするため、例えば面積が12のときに1×12を列挙すれば12×1は除外します。

コード例


# 縦横が整数で面積がareaの長方形の辺の長さを列挙

area = int(input('長方形の面積 : '))

for i in range(1, area + 1):
  if i * i > area:
    break
  if area % i:
    continue
  print(f'{i} × {area // i}')

実行結果

長方形の面積 : 36
1 × 36
2 × 18
3 × 12
4 × 9
6 × 6

変数をdivisorからareaに変えただけの文の解説は同じ仕組みなので省略します。

if i * i > area: break

i * i > areaつまりiとiの積がareaを超えてしまうと変数iの値が長方形の短辺から長辺となってしまいます。

このコードの場合iが9になると9 * 9 = 81と面積36を超えてしまいます。

そのためbreak文でfor文の繰り返しを強制的に終了させています。

continueの文と同じくbreakも複合文で制御する単純文なので改行せずに:の後ろに置いてもいいです。

print(f'{i} × {area // i}’)

短辺である変数iの値と長辺であるarea // iの値をprint関数で表示しています。

f"はf文字列で{}の中に直接式を埋め込めます。