いきなりですが問題です.
を満たす整数
,
の組の一つを求めなさい.
今期の試験問題の一つです.実際には解くのに使うアルゴリズム名も明記していましたが,思うところあって,書かないことにします.Rubyで書いたコードは,http://d.hatena.ne.jp/takehikom/20080804/1217798940にあります.
手計算で求めるための,表をつくります.初期値は,こうです.

1行目は,,
.2行目は,
,
.これは
,
の係数にかかわらず固定です.1行目の
は,与えられた問題の
の係数,2行目は,同じく
の係数とします.変数
は,初期化の際には使用しません.
アルゴリズムに従うと,行単位で次のと
,
,
の順に求めていくのですが,先に,必要となる
と
のペアを求めておきます.

の値は,2行上の
の値を被除数(割られる数),1行上の
の値を除数(割る数)としたときの商で,その左隣すなわち
の値は剰余(余り)となります.119を24で割ったら,商が4で余りが23.24を23で割ったら,商が1で余りが1.23を1で割ったら,商が23で余りが0.
になったら,それ以上の値の更新はありませんので,表のおしまいを意味する横線を引いておきます.なお,「表の上部と底部,それと表頭の直後」の3箇所にだけ横線を引く作法は,フリーハンドで表を描くときだけでなく,論文でも利用可能です.
次に,と
の列を埋めていきます.3行目以降のそれらの値を求めるためのルールは,こうです.
値 = 2つ上の値 - 1つ上の値×同じ行の
の値*1
3行目のは,
で,1です.実は常に1です.

3行目のは,
で,-4です.ここは,必ず
になるとしてかまいません.

4行目のは,
で,-1です.

4行目のは,
で,1+4ですから,5です.

計算としては,これでおしまいです.の一つ上の行の
,
の値が,答えとなります.すなわち,
,
です.実際,
は,
なので1です.
上記のアルゴリズムは,演算回数(特に乗除算)が最小というわけではありません.しかし手計算で求める際に,計算ミスを容易に知ることが可能です.検算方法は,こうです.
(問題の
の係数)×(
の値)+ (問題の
の係数)×(
の値)=(
の値)
この式が,表の各行について成立します.1行目,2行目でも成立します.実際には話が逆で,この等式が成立するように各行の値を定め,かつ計算によりの値が小さくなるように(アルゴリズムが有限ステップで終了するように)定めているのです.ついでに,
の一つ上の行の
の値は,問題の
と
の係数の最大公約数です.ここでは,119と24の最大公約数は1となり,最終的に
という等式になったわけです.
次のチェックも,検算には有用です.
- 表の値はすべて整数であり,小数や分数は一切現れません.
- 3行目以降の
と
の値は,一方が正,一方が負です.具体的には,
- 奇数行目の
は正
- 偶数行目の
は負
- 奇数行目の
は負
- 偶数行目の
は正
- 奇数行目の
- 下の行に行くほど
は小さくなります.
にはそのような順序関係はありません.
以上が,授業で説明し,試験の解答例で書いてきたことですが,と
の最後の行も埋めれば,もう一つ別の検算ができます.

計算方法は上述のものから変わりません.念のため式を書いておくと,のほうは,
で24,
のほうは
で-119です.
最終行の,
,
の値で検算をすると,
は,って筆算するまでもなく0です.このように
の値に,問題の
の係数*2,
の値に,問題の
の係数が現れて,一方にマイナスの符号がつけば,計算は合っています.そうでなければ,どこかで計算ミスをしています.