« 「@InsideApple」からのメール、本物のアップルの広告ニュース&残暑なし快適ジョグ♪ | トップページ | 小林製薬「熱さまシート」、虫刺されを冷やそうとして貼ったら、熱くて痒くて逆効果&9km »

未解決問題「コラッツ予想」と確認用プログラミング(BASIC)~2011センター試験・数学ⅡB

たまに忘れた頃にプログラミング記事を書こうとすると、いつも最初の入口で引っかかる。コード入力して実行する、環境を作れないのだ。

          

今回だと、(少し前の?)高校数学で使われてた言語、BASIC(ベーシック)を使う環境がなかなか見つからない。今さら古過ぎるということか? 1つ前のPCにはインストールしてたけど、今のPCに新たにインストールするのも面倒。

   

そこで最初に試したのが、iOSアプリの Learn BASIC Programming。スイスイ使えていいと思ってたら、「ある数を超えない最大の整数」を表す INT 関数が使えないようで(?)、エラー表示が出る。解決策も発見できず。

     

次に試したのが、パソコンのブラウザで使えるはずのウェブ上のサービス、Quite BASIC。これはなぜか、コードの1行目の「INPUT N」が読めないとか言って来た。

    

これだけでもう、大量の時間とエネルギーを使い果たしたので、とりあえず自分でプログラムを書いて実行するのは断念。与えられたコードの画像を利用するだけにしよう。

☆追記: 翌朝、PCに十進BASICをインストールして成功。この記事の末尾にプログラムの画像を挿入した。)

   

   

     ☆     ☆     ☆

今回の記事のキッカケは、ネットで見かけた数学の懸賞金問題。1937年に数学者コラッツが提示した「コラッツ予想」(Collatz conjecture)に、日本のベンチャー企業から1億2000万円の懸賞金がかけられたとのこと。下の写真は英語版ウィキペディアより

  

210910b

     

それは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よりダウンロードさせて頂いた

  

210910a

   

210910c

    

まず、簡単な(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 ・・・イの答

   

   

     ☆     ☆     ☆

この先は、環境作りの失敗で時間も無くなったので、穴埋めや選択肢を飛ばして、直ちに正解のプログラムを見てみよう。

   

210910e

210910d

  

     ☆     ☆     ☆

まず、最初の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行)。

         

210910f

210911g2

   

これによって、次の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つとも自分で書いて、実行。この問題の説明通りに表示された。

   

210910h

  

210910i

    

      (計 2512字)

| |

« 「@InsideApple」からのメール、本物のアップルの広告ニュース&残暑なし快適ジョグ♪ | トップページ | 小林製薬「熱さまシート」、虫刺されを冷やそうとして貼ったら、熱くて痒くて逆効果&9km »

数学」カテゴリの記事

プログラミング」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



« 「@InsideApple」からのメール、本物のアップルの広告ニュース&残暑なし快適ジョグ♪ | トップページ | 小林製薬「熱さまシート」、虫刺されを冷やそうとして貼ったら、熱くて痒くて逆効果&9km »