熊本教育ネットワークユニオン

活動の報告と相談の窓口です。またブログ担当者の学習の跡でもあります。過去の記事をご覧になるときは下のメニュー欄をクリックください

MENU

素数とプログラム(2)

 

▶︎私たちの組合はひとりでも加入できます。▶︎教育と関係ある仕事であったらなんでも相談してください。問題解決には実績と自信があります。▶ご家族の相談でもよいです。▶「教える」仕事をしていなくとも加入できます。▶左と関係なく、困りごとがあられたらどなたでもご相談ください。適切な労働組合を紹介いたします。◆連絡先:熊本市中央区水前寺1-33-18 熊本県高等学校教職員組合気付熊本教育ネットワークユニオン宛(☎096-382-1133)

 

素数とプログラム(2)

    素数とは1と自分自身以外に正の約数を持たない2以上の整数(「1とその数以外に約数を持たない数」と言われる)。

 素数を求める方法に「エラトステネスの篩」という方法があるということは知っていた。それをプログラムで表現するとどうなるか?なんだかプログラム学習に最適の問題みたいだが、経験が少なく、身近に指導者もいない私がすることはまず模倣だろう。

 「素数の求め方・python」で検索したら、 https://ictsr4.com/py/m0130.html が現れた。これは「エラトステネスの篩」を使うのではなく、素数の定義「素数とは1と自分自身以外に正の約数を持たない2以上の整数」をそのまま使ったプログラムだ。以下引用する(下線はすみませんが、私が追加)。

 

素数の一覧を出力するプログラム

2以上で「ある自然数未満の素数を求めるプログラムを作成します。

ここでは変数limit=100として、100未満の素数を出力します。

 

#1 100未満の素数を列記する

1  limit = 100

2  for i in range(2, limit):

3      for j in range(2, i):

4           if i % j == 0:

5               break

6       else:

7          print(i, end=' ')

 

2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97

 

 

   わからないところは検索と学習。以下は私の言学習しているレベルでの記載。

 1行目 limit = 100は、 limitという変数をつくり、それに100を入れる。※limitと100が等しいではない。「limitと100が等しい(か?)」は「limit == 100」となる。

 2行目 for i in range(2, limit): は、 rangeという関数が使ってある。range(2, limit)とは2から始まり(この場合limit = 100だから)99までの連続した数字の並びを意味します。<例>range(4,7)とは4,5, 6です。最後が7にならないのは7未満ではなく、0から始めているからです。ちなみにrange(7)は、はじまりの数字が省略され、0,1,2,3,4,5,6,の7個の数です。

 で、for i in range(2, limit): は2,3,4,5,6,・・・・99とi にいれて繰り返し(for)操作しなさいということです。最後の:は、Pythonでは、「(条件式)」の後ろに「:」を付けなければなりません。 : を付け忘れると、プログラムが動作しなく、「アレエー」となります。

 3行目   for j in range(2, i): は2からiの前の数までjとして処理を繰りかえしなさい。

 4行目~7行目

  4  if i % j == 0: もし、iをjで割った余り(%は余りを表す)が0ならば、

 ==は右と左を比較して、正しいなら➡true(正)、間違いなら➡false(誤)。

  5   正しければ、やめよ(break)。

  6   そうじゃなきゃ(else:)➡ 7の   iを書きなさい(print(i, end=' ') ※end=‘’は「横に並べて(書きなさい)」。end=‘’がないと、縦に改行して書き続ける(=見にくい)。 

 このプログラムは(iを)1個1個まな板に上げ、(jで)1個1個で割って判断していく方法。100までだから良いけど、試しに100000まで計算させたら(1行目のlimit = 100を100000に変えるだけ(ほんとはより汎用的に(プログラムを)変えるが良いと思う)すごく時間がかかった。

 やってみませんか?

 ただPythonをダウンロードする必要があります。

 

補足:どのくらいの学習でここ(人の作った本当にやさしいプログラムを検索しながら理解する程度)まで来たか。

1 Python基礎学習➡入門書「すらすらわかるPython」の基礎的部分(型、メソッド、条件分岐、リスト型、繰り返し処理、辞書型、関数まで)を実際やりながら学習した。スクリプト、モジュール、パッケージを読んだ(だけ)、Webスクレイピングを少しやってみた。ファイル操作は未着手。

2 同時にやっていた「ラズベリーパイ超入門」でPythonで学んでいた。あるページ(扇風機の制御(DCモータの制御)で「本の通りにならない!」➡ 放置。

3 ポリテクセンターに行ってラズベリーパイ入門講座を受けようとして、講座内容をみたら、C言語ラズベリーパイを動かすようだ。➡「C言語で始めるラズベリーパイ徹底入門」とWebでCを学ぶ。さらに「苦しんで覚えるC言語」で苦しむも何とか「ポインタ」まで行く、しかし、多分半年ほどたち、すべて忘れる。

4 自作分光器の作成を思い立ち、C12880MAをArduinoPythonで動かそうとした。Pythonの学び直しが必要になった。

5 Python学習をまた、1からやるのも「芸がない」ので、最近興味を持った「素数」関連プログラムを使い実践的な学びを試みている。

 

 

▶︎私たちの組合はひとりでも加入できます。▶︎教育と関係ある仕事であったらなんでも相談してください。問題解決には実績と自信があります。▶ご家族の相談でもよいです。▶「教える」仕事をしていなくとも加入できます。▶左と関係なく、困りごとがあられたらどなたでもご相談ください。適切な労働組合を紹介いたします。◆連絡先:熊本市中央区水前寺1-33-18 熊本県高等学校教職員組合気付熊本教育ネットワークユニオン宛(☎096-382-1133)