15年程前、CASIO から FX-702P というプログラム電卓が出ていた。
502P、602P という機種もあったが、これらは、搭載言語がアセンブラ。
702P は BASIC の縮小セットが載っていた。メモリは 1680 バイト。
画面は液晶1行×18桁。数値は10桁表示される。
当時としては、プログラム電卓の最高峰(HPは別として)で、
工学系学生の必需品だった。
友人に影響されて購入し、当初は『I/O』のゲームプログラム等で遊んでいた。
そのうちに飽きてきて、数値演算のプログラムを作ってみたが、
既に確立している技術をポケコンに移すだけ、
という点に物足りなさとむなしさを感じていた。
そんなある日、「数学セミナー」に載っていた、陶山弘実氏の『メルセンヌ数と素因数分解』
を読んで、その文末の指名手配リスト、
2211−1
2227−1
2251−1
及び、「どなたか素因数分解してみようという方はおられないだろうか」
という挑発の一文から人生が変わった。
以下は、そんな日々の日記の抜粋である。
時期的に云うと、大学の2年〜3年にあたる。
- 1982/11/10(木)
- 素因数分解のプログラムを手直しして、219−1を計算させたところ、1分04秒。
Program Library のやつでは、1分23秒。
実用上は充分だが、新素数の発見には程遠い。
やはりマシン語。せめて FORTRAN。
※「Program Library」というのは、702P に添付されていたプログラム集。
この時作ったプログラムというのが、以前、数密『第12章 素因数分解アルゴリズム』
で紹介した、2、3、5の倍数を除去する、というやつである。
- 1982/11/11(金)
- きのうの続きで、今度は、231−1。1時間7分かかった。
今日、行列式のプログラムを考えたが、値がおかしい。
問題があるとすればアルゴリズム自体だが、そうとも思えないし、
めんどくさくていいかげん気が狂いそうになる。
- 1982/11/18(木)
- 先週から素数にこだわっているが、少し本を読んで調べたところ、
かなり現実に手の届くところまで来ている。
別に学校の計算機を使わなくたって、
近藤(友人)のパソコンで1週間、1ケ月もかければ確実に計算できるらしい。
要するに長い桁の割り算と掛け算をやるプログラムを組めば万事解決で、
それを考えるのがめんどうだが、別にマシン語で組む必要はない。
- 1982/11/22(月)
- 265537−1を調べようと思っていたが、もうあの Noll がやってしまったらしい。
それですっかりやる気をなくして、それでも、ということで、
2211−1
2227−1
2251−1
を素因数分解してみようと思い、計算したが、2251−1が503で割り切れてくれない。
つまり計算まちがいということで、やはりプログラムを組まなければだめだ。
※この時点では、まだ2のベキ乗計算をプログラムにしたのみで、割り算は筆算だった。
「あの Noll」というのは、1978 に 25番目のメルセンヌ素数221701−1、
1979 に 26番目のメルセンヌ素数223209−1、を高校在学中に発見した Noll のこと。
自分もほぼ同学年だったため、かなりライバル意識を感じた。いわゆる「片思い」というやつか。
- 1982/12/02(木)
- 2211−1、2227−1、2251−1を久しぶりにprogramを組んで計算した。
2251−1はみごと503でも54217でも割り切れた。感動的だった。
※この時点では、割り算もプログラム化している。簡単に説明すると、
まず多倍長数は、配列をとって、5桁ずつ格納する。702P では10桁まで正確な計算ができるので、
配列2つ(10桁)と除数5桁で、5桁の数までは正しく計算できる。
- 1982/12/03(金)
- どうも傍らで program を走らせていると他のことに集中できない。
2211−1は 15193 という素因子を持っていて、実際に割ってみたらちゃんと割り切れた。
割り算だけは実際に筆算で確かめるので、割り切れる瞬間は実に感動的である。
今2227−1を brute force で調べているが、
どうせ10万以下の素数では割り切れないという結果が出るだろう。
p-1 method の program を組んであらためてやり直すつもり。
しかし、来年の3月までには何らかの情報が入るだろう。
- 1983/01/21(金)
- 最近ではすっかり素因数分解が趣味になってしまった。
これまでの表を書き直して、今日2257−1までの約数をいろいろ調べた。
※この表というのは、257以下の素数pについての、2p−1の値と、その素因数の表である。
- 1983/01/30(日)
-
※いきなり注から入ってしまうが、前に述べたとおり、正確に計算できるのは除数5桁までのはずだった。
しかし、プログラムをそのまま走らせていると、5桁を突破しても、偶然変な値が入って、
割り切れるかもしれない、そう思い、プログラムを走らせ続けて外出した。
702P では、演算中のとき、右端に小さい印がつきっぱなしになり、演算が終了すると、消える。
終了後、一定時間入力がないと、電源OFFとなる。
帰って来て 702P を眺めると、電源がOFFになっていた。
そして、メモリを見ると、1868569 という値が入っていた……
きのう、ケガの功名で、例の素因数分解プログラムが、
1千万以下までダイレクトに調べられることがわかった。
内部演算が12桁なので、10桁しか表示されないが、中ではなんともないらしい。
続々と大きい素因数が見つかった。
2113−1の 1868569
2163−1の 150287
2239−1の 176383
等。
- 1983/01/31(月)
- あの発見のおかげで、9桁の数でもダイレクトに割り算できることがわかったし、
今朝方、
273−1の 2298041
271−1の 228479
2173−1の 730753
が見つかった。
- 1983/02/01(火)
- 長い間素数だと思っていた253−1の因数 1416003655831 が 69431で割り切れることがわかった。
273−1の 9361973132609 が素数であることを確認した。
ところで、土曜日から使いっぱなしだが、休ませなくてもいいのだろうか。
- 1983/02/03(木)
- 依然、むなしい作業を続けている。
2199−1は 5365837 まで、
2157−1は 5900689 まで
探しても見つからなかった。
その一方では、2167−1の因数 2349023 が見つかったりする。
6桁のものは全て調べてしまったので、見つかる可能性は7、8、9、10桁しかない。
7桁程度ならともかく、あとの桁は電池がもったいなくてやる気がしない。
※ 702P の稼働時間はリチウム2個で連続180時間である。7日間とちょっと。
もともと、買ってからかなり経過しており、ここ数日は連続して使っている。
- 1983/02/09(水)
- 『数論における未解決問題集』という病人向けの本を見つけた。明日買う。
- 1983/02/10(木)
- 買ってきた。
- 1983/02/13(日)
- 電池を買ってから新しく見つけたのは、2173−1の 1505447 だけ。
2200万ぐらいの素因数を持つものは、どうも調べつくしてしまったような感がある。
まったく素因数が見つからないのが、103、157、199、229、241。
1103なんか1千万まで調べても見つからなかった。
1191は 2p+1 の 383 が見つかっただけで、3428833 まで調べても見つからない。
※リチウム電池2個で、学生生協で買うと800円強ぐらいだった。
学生にしてみれば高いし、なによりもこのような使い方をしているから、割高感がある。
素因数1個見つけるためにn時間 ⇒ 電池m個 ⇒ s円、ということで、これが正に課金だった。
- 1983/02/14(月)
- 数学セミナーの3月号にちょっとした事件がのっていた。
28番目のメルセンヌ素数、286243−1が見つかったらしい。
- 1983/02/15(火)
- 2233−1の 622577 が見つかった。
これまで計算違いをしていた訳で、これだから恐ろしい。
- 1983/02/26(土)
- 明日から1月、88を借りる。
もう702Pを酷使しなくてすむ。
(まさに「酷使」だった。これを酷使と云わずして何と呼ぶ?)
友人で、
「50cc のバイクは、50cc というとヤクルトみたいなもんだから、とてもじゃないがかわいそうで、
アクセルをふかすことができない」
と云った者がいたが、この頃の私の 702P の使い方は、まさにこれに相当する。
しかしこの当時、何の成果も得られないまま数日が過ぎ、ある朝目覚めてポケコンが止まっていたりすると、
本当に砂金でも掘り当てたような気がした。
こういう使い方をしても、別に壊れたりはせず、今でも現役である。
まさに、我が愛機と呼ぶにふさわしい。