まえがきから引用する。
本書は整数と多項式に関する入門書である.
問題の解答は p.185 から始まる。このページに「プログラム例は朝倉書店の web ページに掲載した.」とある。 以下アクセス方法が書かれているのでこの通りたどると、拡張子が lzh のファイルがある。今となっては lzh ファイルは珍しい。 解凍ソフトである Lhaplus をインストールしてなんとかファイルを見る。ところがコメントがほとんどない。困った。 自力で解析するしかない。以下はプログラム名と答の対照表である。
プログラム名 | 答 | 備考 |
---|---|---|
binespsg.c | 答 3.102 | 符号付き 2 進展開 |
crthard.c | 答 3.115 | 連立合同式の解 |
euclid.c | 答 2.15 | ユークリッドの互除法 |
exeuclid.c | 答 2.18 | 拡張ユークリッドの互除法 |
genshi10.c | 答 3.114 | 10 が原始根となる素数 |
genshi2.c | 答 3.111 | 1000 以下の素数の最小原始根 |
jsymbol2.c | 答 4.28 | 平方剰余記号(ヤコビ記号)の計算 |
modinv.c | 答 3.58 | `ax -= 1 mod m` となる整数 `x` を一つ見つけるプログラム |
modpow1.c | 答 3.68 | 繰り返し 2 乗法によって `a^n mod m` を計算するプログラム 1 |
modpow2.c | 答 3.70 | 繰り返し 2 乗法によって `a^n mod m` を計算するプログラム 2 |
modsqrt.c | 答 4.12 | `x^2 -= a mod p` となる `x` を一つ見つけるプログラム |
sieve.c | 答 1.22 | エラトステネスのふるい |
本書で上記のプログラムにはないものがある。問 3.74 の答で、
素数 104729 の最小原始根を求めるものである。本書の p.192 では、答 3.74 104729 の最小原始根は 23 である.web 上のプログラム例を参照.
とあるが、このプログラム例がない。仕方がないので上の genshi2.c を書き換えて答を出そうとした。しかし、答が出ない。
C 言語の int が 32 ビット整数であるために、桁あふれが起きるのだろう。int を long に書き換えて(64 bit マシンなので sizeof(long) = 8 である)、
再度実行したところ、答は 12 だった。23 ではないのか。気になって、WolframAlpha
https://ja.wolframalpha.com/input?key=&i2d=true&i=PrimitiveRoot%5C%2891%29104729%5C%2893%29
で計算させたり、下記のサイトで示されている Python によるコード
https://tobetakoyaki.hatenablog.com/entry/2019/09/09/190000
で計算させたりしたが、どちらも 12 の値が出る。いいのだろうか。
数式記述は ASCIIMathML を、 数式表現は MathJax を用いている。
書名 | 初等整数論 |
著者 | 木田祐司 |
発行日 | 2001 年 11 月 25 日(初版第 1 刷) |
発行元 | 朝倉書店 |
定価 | 3600 円(本体) |
サイズ | 276ページ |
ISBN | 4-254-11596-2 |
その他 | 草加市立図書館で借りて読む |