未解決問題「コラッツ予想」と確認用プログラミング(BASIC)~2011センター試験・数学ⅡB
たまに忘れた頃にプログラミング記事を書こうとすると、いつも最初の入口で引っかかる。コード入力して実行する、環境を作れないのだ。
今回だと、(少し前の?)高校数学で使われてた言語、BASIC(ベーシック)を使う環境がなかなか見つからない。今さら古過ぎるということか? 1つ前のPCにはインストールしてたけど、今のPCに新たにインストールするのも面倒。
そこで最初に試したのが、iOSアプリの Learn BASIC Programming。スイスイ使えていいと思ってたら、「ある数を超えない最大の整数」を表す INT 関数が使えないようで(?)、エラー表示が出る。解決策も発見できず。
次に試したのが、パソコンのブラウザで使えるはずのウェブ上のサービス、Quite BASIC。これはなぜか、コードの1行目の「INPUT N」が読めないとか言って来た。
これだけでもう、大量の時間とエネルギーを使い果たしたので、とりあえず自分でプログラムを書いて実行するのは断念。与えられたコードの画像を利用するだけにしよう。
(☆追記: 翌朝、PCに十進BASICをインストールして成功。この記事の末尾にプログラムの画像を挿入した。)
☆ ☆ ☆
今回の記事のキッカケは、ネットで見かけた数学の懸賞金問題。1937年に数学者コラッツが提示した「コラッツ予想」(Collatz conjecture)に、日本のベンチャー企業から1億2000万円の懸賞金がかけられたとのこと。下の写真は英語版ウィキペディアより。
それは7月の話だが、昨日は別の「ブレイクスルー賞」で、日本人2人がそれぞれ賞金300万ドル(3億3000万円)を獲得したニュースが流れてた。数学部門では、京都大学の望月拓郎教授(ABC予想関連の望月氏とは別人)。
望月拓郎氏の研究内容は、少しだけ調べてみた所だと、意味不明な言葉・概念が並んでいて、残念ながら全く理解不能。
それに対して、コラッツ予想は小学3年生くらいでも分かるし、計算実験で楽しめるはず。
「どんな正の整数でも、偶数なら2で割る、奇数なら3倍して1を足す、という操作を繰り返せば、必ず1に到達するだろう。」
☆ ☆ ☆
実際に試してみると、意外なほど長いプロセスになることもある。例えば、7なら、7→22→11→34→17→52→26→13→40→20→10→5→16→8→4→2→1。操作数は16回。
英語版ウィキペディアによると、2020年頃の段階では、10の20乗を超える所までコンピューター計算で確認されてるらしい。
ちょっと似た話なら、何度か聞いた気がする。例えば、6年前の人気ドラマ『デート』第9話では、「どんな数字も各位の2乗を足すと1か89になる」というコネタが挿入されてた。
直感的には、コラッツ予想は簡単に示せそうな気もするが、提示から84年も経つのに未解決。ただ、ネットのあちこちに、センター試験に出題されたという情報があったので、すぐ問題ファイルを手に入れて解いてみた。
それが数学ⅡBの選択問題で、プログラミング関連。私が見た範囲では、どのサイトも、プログラミングの部分を飛ばして最初の導入だけ紹介してたので、ここでは本題のプログラミングも扱う。
☆ ☆ ☆
それでは、2011年のセンター試験問題を見てみよう。「日本の学校」HPよりダウンロードさせて頂いた。
まず、簡単な(1)を解いてみる。
6→3→10→5→16→8→4→2→1
∴ F(6)=(6から始めて1が得られるまでの操作回数)=8 ・・・アの答
11→34→17→52→26→13→40→20→10→5→16→8→4→2→1
∴ F(11)=(11から始めて1が得られるまでの操作回数)=14 ・・・イの答
☆ ☆ ☆
この先は、環境作りの失敗で時間も無くなったので、穴埋めや選択肢を飛ばして、直ちに正解のプログラムを見てみよう。
☆ ☆ ☆
まず、最初の100番の行で、調べる自然数Nをインプット。問題(1)なら、6とか11。
次に110行で、Iという変数を用意して、最初はNの値をそのまま代入。操作が進むと、Iは変化していく。
一方、120行で、Cという変数(回数のカウント用)も用意して、最初は0を代入。1回の操作ごとに、+1で回数を増やしていく。
130行からが実質的な操作。まず、I=1なら、直ちに210行まで飛んで、F(1)=1と表示。
140行と150行は、もし「Iが偶数」なら2で割ったものをIとする、という条件を、「INT(I/2)×2=I」と書いてる。
これは、Iが奇数だと成り立たない。例えばI=3の時、INT(3/2)×2=1×2=2になって、条件を満たさず、180行に進むことになる。
160行は、1回の操作ごとに、回数Cに1を加える操作。170行は、「もし」という条件の終了。
180行は、1でもないし偶数でもない奇数Iに対して、3倍して1を加える操作。
190行で、回数1を加えた後、200行で130行までバックする。I=1になったら終了。
210行で、結果の表示。F(N)=C。NとCはここまでに登場した変数の値で、他は単なるアルファベットの文字とカッコの記号。
220行で、すべて終了。
☆ ☆ ☆
さらに、ある自然数M以下の自然数Nのうち、F(N)≦10となるすべてのNについて、F(N)の値を出力するプログラムへと書き換える。
最初と最後の辺りだけ少し変更して(下の青枠)、次のコードが正解。101行のFOR TO文で、N=1からMまでの実行を宣言。211行のNEXT Nで、次の数Nの操作へと進んで行く。PRINT(表示)は、C≦10の時だけ(210行)。
これによって、次の8行が表示される(はず)。改行は省略。
F(1)=0 F(2)=1 F(3)=7 F(4)=2 F(5)=5 F(6)=8 F(8)=3 F(10)=6
よって、210行の PRINT文が実行される回数は8 ・・・サの答
後で実際にプログラミングしてみる予定。とりあえず今日のところはこの辺で。。☆彡
P.S. 翌朝、2つとも自分で書いて、実行。この問題の説明通りに表示された。
(計 2512字)
| 固定リンク | 0
« 「@InsideApple」からのメール、本物のアップルの広告ニュース&残暑なし快適ジョグ♪ | トップページ | 小林製薬「熱さまシート」、虫刺されを冷やそうとして貼ったら、熱くて痒くて逆効果&9km »
「数学」カテゴリの記事
- Python(パイソン)入門4~ランダムなサイコロの目の予想、数値データのリストの処理(ChatGPT4oも使用)(2024.09.20)
- パズル「絵むすび」31、解き方とコツ、考え方(難易度4、ニコリ作、朝日新聞be、2024年9月14日)(2024.09.15)
- 四角形や丸の「真ん中」に正三角形を配置するデザイン(YouTubeほか)、長さ、重心、三角形分割錯視を考慮した視覚調整(2024.09.08)
- パズル「推理」、小学生向け8、カンタンな解き方、表の書き方(難易度3、ニコリ作、朝日be、24年8月31日)(2024.09.01)
- パズル「ナンスケ」解き方13、2024年7月13日の問題は間違い「ではありませんでした」(難易度4、ニコリ作、朝日新聞be)(2024.07.13)
「プログラミング」カテゴリの記事
- Python(パイソン)入門4~ランダムなサイコロの目の予想、数値データのリストの処理(ChatGPT4oも使用)(2024.09.20)
- ps5.js Web Editor(Processing)のプログラミングでお絵描き、アニメーション作成~ 高校教科書『情報 II 』(東京書籍)(2024.08.22)
- Python(パイソン)入門3~乱数を利用した、じゃんけんゲーム作成など(生成AI・ChatGPT4も使用)(2023.10.06)
- Python(パイソン)入門2~高校副教材とオンライン環境Bit Arrow、さらにAI(ChatGPT4)も使用(2023.09.06)
- Python(パイソン)入門1~人気プログラミング言語を高校教科書副教材(東京書籍)とオンライン環境Bit Arrowで簡単に(2023.02.28)
コメント