中学の数学 (7-2) 約数を python で探そう
[ サイトマップを見る ]
Python で約数をさがそう
演習1の答え
前回は,約数を探す関数を作りました。次のコードを作成しました。
def divisors(n):
for i in range(1, n+1):
if n % i == 0:
print(i)
変数 n を 1 でわり,答えが整数になれば,出力。
変数 n を 2 でわり,答えが整数になれば,出力。
変数 n を 3でわり,答えが整数になれば,出力。
と続けて,最後,
変数 n を n でわり,答えが整数になれば,出力。
となります。
n の約数には 1 と n が必ず含まれる
しかし,n の約数は,必ず 1 と n ですから,
変数 n を 1 でわり,答えが整数になれば,出力。
変数 n を n でわり,答えが整数になれば,出力。
のふたつの計算は不要です。
for 文を修正しよう
計算しないようにするには,計算の範囲を 2 からn-1にかぎればよいです。どうしますか。
以下のようにします。
def divisors(n):
for i in range(2, n):
if n % i == 0:
print(i)
range() の引数を変更しているのがわかります
しかし,1 と n は約数として出力します。どうしたらいいですか。
コードは上から下に読み進められる
以下のようにします。
def divisors(n):
print("1")
for i in range(2, n):
if n % i == 0:
print(i)
print(n)
divisors(100000)
最初に,print("1") としています。これは 1 を出力しなさいと言う意味です。
その後,for 文をつかって繰り返し計算をしています。
その後,print(n) として,n を出力しています。
コードはこのように上から下に進んでいきます。
すこしこれで,計算量がへりました!
演習2
まだ,計算量を減らすことができます。本当に,変数n を 2 から n-1 で割らないといけないのでしょうか。もっと少なくて済むのではないでしょうか。あなたはどう考えますか?そして,どのように上のコードを修正しますか?やってみましょう。
関連する書籍
[ サイトマップを見る ]
この記事が気に入ったらサポートをしてみませんか?