中学の数学 (7) 約数を python で探そう
[ サイトマップを見る ]
Python で約数をさがそう
6 の約数をpython をつかって求めてみましょう。
Idle を起動し,6を1で割ります。
>>>6/1
6.0
6.0 となりました。整数ですから,1 は 6 の約数です。
他も同様に調べてみましょう。
>>>6/2
3.0
>>>6/3
2.0
>>>6/4
1.5
>>>6/5
1.2
>>>6/6
1.0
整数になっているものが約数です。ひとつひとつ確認してみると,1 のほか,2. 3. 6 も約数であることがわかります。4 や 5 は割り切れますが,答えが小数になり,整数ではありませんから,約数ではありませんね。
では次に,100 の約数を調べてみましょう。
え!1 から 100 まで割り算をするの?たいへんです。
そこで,Python に計算してもらいましょう。
繰り返しの文
100 を元の数として,それを1から100までの数で100回割り算をします。100回繰り返しますが,python にはこの繰り返しを簡単に実現できます。
for 文を使います。
for i in range(1, 100+1):
if 100 % i == 0:
print(i)
これを Idleのコマンドラインに貼り付けて,エンターを2回押せば,次のように約数を出力してくれます。
1
2
4
5
10
20
25
50
100
さて,先ほどのコードを説明しておきましょう。
for i in range(1, 100+1):
if 100 % i == 0:
print(i)
1行目で,これから100 回繰り返しますと python に教えています。range(1, 100+1) によって,$${1, 2, 3 \cdots 100}$$ という数列が作られます。
1 から 101 までではなくて,1 から 100 まであることに注意が必要です。
これから100回何を繰り返すのかというと,2行目と3行目に書かれているコードを繰り返します。
1回目の繰り返しの時点で,変数 i には 1 が入っています。そして,2行目と3行目に書かれているコードを繰り返します。
2回目の繰り返しの時点で,変数 i には 2 が入っています。そして,2行目と3行目に書かれているコードを繰り返します。
3回目の繰り返しの時点で,変数 i には 3 が入っています。そして,2行目と3行目に書かれているコードを繰り返します。
if 文
2行目に if からはじまるコードがあります。これを if 文といいます。
if とは英語で「もしも」という意味です。
if のあとには条件が続きます。この場合は,100 % i が 0 というのが条件です。% はあまりを求める演算子で,100 を i で割ってあまりがなければ,つまり,割り切れれば,次の行のコードを実行します。
今回の場合は,割り切れれば,その割った数,i を出力するよう指示しています。
次に,20000 の約数を求めることになりました。20000 であっても大丈夫,先ほどのコード,書き換えるだけですね。
for i in range(1, 20000+1):
if 100 % i == 0:
print(i)
これで大丈夫です。
関数
しかし,書き換えるのも面倒です。約数を求めたい数だけ示せば,自動的に約数を求めてもらいたいところです。
そのためには次のようにします。
def divisors(n):
for i in range(1, n+1):
if n % i == 0:
print(i)
これを Idle のコマンドラインに貼り付けて,エンターキーを2度押します。
その後,次のコードも貼り付けて,エンターキーを押しましょう。
divisors(100000)
すると,約数を出力してくれました。
もうこれからは,divisors() を使えば,約数を求めたい元の数を指定するだけでよくなりました。
divisors のようなはたらきをするものを関数といいます。
関数の定義は簡単です。まず最初に def と書きます。これはdefine,定義という英語です。これから関数を定義しますよといっているわけです。
そのあとに関数名を書きます。python がもともと使っている関数名,たとえば print などですね,それとぶつからないようにします。そのあとのカッコで引数に何をとるかを定義しています。引数は「ひきすう」と読みます。
この場合は割られる元の数が引数になります。それを変数 n で表現しています。
次の行以降,指定された変数を使って処理を行います。この場合は n の約数を探して,あれば出力しています。
def divisors(n):
for i in range(1, n+1):
if n % i == 0:
print(i)
このコード,まだまだ改良のよちがありそうです。次回はこのコードを改良していきましょう。
演習1
約数は 1 と元の数を必ずとります。すると,n を元の数とするとき,1 と n は必ず約数になります。ですから,n % 1 が 0 になるかは確認する必要はありません。
1 と n は約数であるか確認しないコードを書いてください。ただし,1 と n も出力するようにしましょう。
ちょっとむずかしいぞ!
関連する書籍
[ サイトマップを見る ]
この記事が気に入ったらサポートをしてみませんか?