パンの木を植えて

主として数学の話をするブログ

計算機に整数論の計算をやってもらいたい - Exercise 6.3(c)

\[ %%% 黒板太字 %%% \newcommand{\A}{\mathbb{A}} %アフィン空間 \newcommand{\C}{\mathbb{C}} %複素数 \newcommand{\F}{\mathbb{F}} %有限体 \newcommand{\N}{\mathbb{N}} %自然数 \newcommand{\Q}{\mathbb{Q}} %有理数 \newcommand{\R}{\mathbb{R}} %実数 \newcommand{\Z}{\mathbb{Z}} %整数 %%% 2項演算 %%% \newcommand{\f}[2]{ \frac{#1}{#2} } \]

おはようございます.

引き続き Silverman 『はじめての数論』の演習問題をやっていきます.

今回の問題は,演習問題 6.3 (c) です.

計算機を走らせて即終了という問題ですが,プログラムを書いて計算するのは初めてなので,若干丁寧めにやります.

プログラミング言語は python を使用し,実行環境については VSCode の Jupyter 拡張機能を使います.詳しくはこちらの一連の記事を参照してください.

\[ %%% 黒板太字 %%% \newcommand{\R}{\mathbb{R}} \newcommand{\C}{\mathbb{C}} \newcommand{\Q}{\mathbb{Q}} \newcommand{\Z}{\mathbb{Z}} \newcommand{\F}{\mathbb{F}} \newcommand{\N}{\mathbb{N}} %%% カリグラフィー %%% \newcommand{\calf}{\mathcal{F} } \newcommand{\calg}{\mathcal{G} } %%% 引数を取るもの %%% \newcommand{\f}[2]{ \frac{#1}{#2} } \newcommand{\im}{\operatorname{im} } \]


問題文

次のアルゴリズムを考える.

Input: 正の整数 $a$, $b$
Output: $a$ と $b$ の最大公約数 $g$ と $ax + by = g$ なる整数 $x, y$
  1. $x \leftarrow 1$, $g \leftarrow a$, $v \leftarrow 0$, $w \leftarrow b$ と初期化する.

  2. While $w \neq 0$ do

  3.   $g$ を $w$ で割った商を $q$ とおく.

  4.   $g$ を $w$ で割った余りを $t$ とおく.

  5.   $s \leftarrow x - qv$.

  6.   $(x,g) \leftarrow (v,w)$.

  7.   $(v,w) \leftarrow (s,t)$.

  8. $y \leftarrow (g-ax)/b$ とおく.

  9. Return $(g,x,y)$

このアルゴリズムを次の $(a,b)$ に対して実際に動かしてみなさい.

(i) (19789, 23548)

(ii) (31875,8387)

(iii) (22241739, 19848039)


解答

こないだ召喚した jupyter君(VSCodeにおけるすがた) に計算してもらいましょう.

出力をそのまま書くとこんな感じです.

(i) 7 1303 -1095

(ii) 1 -381 1448

(iii) 237 -8980 10063

ちなみに計算風景はこんなん.

やっぱり jupyter はUIが分かりやすくていいですね.

さすが jupyter君計算が早いですね.0.8秒ですか.(逆に計算機にしては遅いのかもしれない……?)

初回なので Wolfram Alpha さんに検算をお願いしましょう.

この方はですね,いろいろと計算をやってくださる Web サービスです.この方がいれば jupyter君要らない説もあるんですが,やっぱり直接命令して動かす方が楽しいので,基本的に Wolfram さんには検算しかお願いしないつもりです.

おー,合ってますね.素晴らしい.


感想とまとめ

プログラミングは初めてなので少し慎重に進めています.

数学科のひとはあまり計算機を重視しないひとが多いですが.実際に具体例の計算をがっつりやろうとすると計算機というランプの魔人が扱えるのはすごく利点が大きいと思います.習得は大変ですけど,その価値がありそう.

Wolfram Alphaさんがいるから要らないと言われればそれまでですが,でも Wolfram さんにも苦手分野はあるわけで,原理的なことがわかってれば応用が利くんじゃないかな….