◎ 今回は ruby で行列を用いる。 require "matrix" と書くことで行列が使えるようになる。
◎ ユークリッドの互除法(初級)
に対して、
とおくと、
○ ruby による
の実装例(ruby では大文字小文字を
区別する。ここでは小文字の変数や関数しか扱わないことにする 。)
def amatrix(q) return(Matrix[[-q,1],[1,0]]) end
◎ 拡張されたユークリッドの互除法
から出発して、
の形のベクトルを得るのが前の問題の趣旨であった。
今度は
の他にもうひとつ単位行列
をならべる。
これを何度か繰り返せば、
という行列を得る。これをうまく利用せよ。
## $B%W%m%0%i%`Nc(B require "matrix" def amatrix(q) return(Matrix[[-q,1],[1,0]]) end def gojoho(a,b) v=Vector[a,b] m=Matrix.I(2) ###m$B$N=i4|CM$OC10L9TNs(B while (true) ###$BL58B%k!<%W(B if (v[0]==0) then ### == $B$KCm0U!#(B return([v[1],m]) ### v[0]=0 $B$J$iC&=P(B end q1=v[1].div(v[0]) m1=amatrix(q1) v=m1*v m=m1*m end end ### $B<B9TNc(B p gojoho(113,25)
最終問題:
と
とおくとき、
の最大公約数
と、
を満たす整数の組
の例をあげよ。