見出し画像

中学の数学 (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 で割らないといけないのでしょうか。もっと少なくて済むのではないでしょうか。あなたはどう考えますか?そして,どのように上のコードを修正しますか?やってみましょう。

関連する書籍

[ サイトマップを見る ]

この記事が気に入ったらサポートをしてみませんか?