本サイトAIZU ONLINE JUDGE ITP1_3_D へはこちらから
問題:約数の数
3つの整数 a、b、c を読み込み、a から b までの整数の中に、c の約数がいくつあるかを求めるプログラムを作成してください。
Input
a、b、c が1つの空白区切りで1行に与えられます。
Output
約数の数を1行に出力してください。
Constraints
- 1 ≤ a,b,c ≤ 10000
- a ≤ b
Sample Input
5 14 80
Sample Output
3
解答例
a, b, c = map(int, input().split())
cnt = 0
for i in range(a, b + 1):
if c % i == 0:
cnt += 1
print(cnt)
解説
以下のように解いていきます。
3つの整数の読み込み
ここではmap関数を使用します。第二引数のinput().split()で空白区切りの文字列として取得した値を、一つずつint関数に当てはめて整数型に変換し、a、b、cに設定していきます。
# input().split()で空白区切りの文字列を取得 → intに変換 → a、b、c に設定
a, b, c = map(int, input().split())
※サイト内「AIZU ONLINE JUDGE ITP1_1_Cをpythonで解いてみた」の、map関数とはにmap関数の使用方法が書かれておりますのでぜひご覧ください。
for文を使用し、a から b までの中でcの約数をカウントする
まず、約数を記憶する変数cntを用意します。
続いて、for文のイテラブルオブジェクト(繰り返し可能なオブジェクト)にrange(a, b + 1)を設定し、a から b までループ処理を行います。
※b + 1とするのは、range(開始値, 終了値)を設定すると、終了値であるbは含まれないため。
そして、a から b までの中でcの約数がある(余りが0の)場合に、約数を記憶する変数cntに+1します。
# 約数を記憶する変数cntを用意
cnt = 0
# aからbまでfor文を回す
for i in range(a, b + 1):
# cの約数(余りが0のもの)の場合
if c % i == 0:
# 約数を記憶する変数cntに+1する
cnt += 1
※サイト内「AIZU ONLINE JUDGE ITP1_3_Bをpythonで解いてみた」の、range関数とはにrange関数の使用方法が書かれておりますのでぜひご覧ください。
cの約数を表示する
for文終了後に、print文を使用し約数を記憶する変数cntを表示します。
# print関数でcの約数(cnt)を表示する
print(cnt)
※サイト内の「AIZU ONLINE JUDGE ITP1_1_Aをpythonで解いてみた」の、print関数とはにprint関数の使用方法が書かれておりますのでよかったらご覧ください。
最後に、もう一度プログラムを確認してみましょう。
# input().split()で空白区切りの文字列を取得 → intに変換 → a、b、c に設定
a, b, c = map(int, input().split())
# 約数を記憶する変数cntを用意
cnt = 0
# aからbまでfor文を回す
for i in range(a, b + 1):
# cの約数(余りが0のもの)の場合
if c % i == 0:
# 約数を記憶する変数cntに+1する
cnt += 1
# print関数でcの約数(cnt)を表示する
print(cnt)
コメント