• ベストアンサー

逆元の計算方法

逆元を計算するのにユークリッドの互除法というのでできると聞きました。 でも、ユークリッドの互除法っていうのは最大公約数を求めるのに使うのですよね?どうやって逆元を求めるんですか?たとえば、13を法としたとき5の逆元はどうやって求めるのですか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

ここで言う逆元とは、おそらく「乗法の」逆元のことですね? ご質問で出された例で言えば、 5y ≡ 1(mod 13)となるyを求めよ、という意味だと思います。 この場合なら逆元は8で、 5×8 = 40 = 13×3 + 1 ≡ 1(mod 13)となっています。 すなわち、13p + 5q = 1となる整数p,qを 一組求めれば、そこから逆元は求まります。 いま、便宜的に「13×● + 5×▲」の形を 「基準形」と呼ぶことにします。 目標は「『1』を基準形に書き直す」ことになりますね。 これを行なうにあたってEuclid互除法がどのように役立つのか? まず13と5に対し互除法を実行してみます。 13 ÷ 5 = 2 余り 3 5 ÷ 3 = 1 余り 2 3 ÷ 2 = 1 余り 1 というふうに、13と5は互いに素ですから、 「余りが1になる」まで行き着きます。 さて、上の式たちを「余り = ……」の形に書き換えると (a) 3 = 13 - 5×2 (b) 2 = 5 - 3×1 (c) 1 = 3 - 2×1 となります。(a)を見ると、 「『3』が基準形に書き直されたもの」 と見ることができます。 すると、これを(b)に代入すれば (b')2 = 5 - (13 - 5×2)×1 = 13×(-1) + 5×3 と、『2』も基準形に書き直されました。 さらに(a)と(b')を(c)に代入すれば 1 = (13 - 5×2) - [13×(-1) + 5×3]×1 = 13×2 + 5×(-5) と、ついに『1』が基準形で表されたことになります。 以上より、5×(-5) ≡ 1(mod 13) したがって「y = -5 + 13n」の形をしたものはすべて 5y ≡ 1(mod 13) を満たします。 n = 1とすれば逆元8が求まります。 もう1つだけ例題をやってみましょう。 「31を法とする12の乗法の逆元は?」 ▼印は基準形で書かれた箇所です。 (解)互除法にて 31 = 12×2 + 7 12 = 7×1 + 5 7 = 5×1 + 2 5 = 2×2 + 1 すなわち (a)7 = 31 - 12×2▼ (b)5 = 12 - 7×1 (c)2 = 7 - 5×1 (d)1 = 5 - 2×2 (a)を(b)に代入して (b')5 = 12 - (31 - 12×2) = 31×(-1) + 12×3▼ (a)(b')を(c)に代入して (c')2 = (31 - 12×2) - [31×(-1) + 12×3]×1 = 31×2 + 12×(-5)▼ (b')(c')を(d)に代入して 1 = [31×(-1) + 12×3] - [31×2 + 12×(-5)]×2 = 31×(-5) + 12×13▼ したがって12×13 ≡ 1(mod 31)すなわち逆元は13となります。

参考URL:
http://www.nara-edu.ac.jp/~asait/c_program/sample/euclid.htm
naoki0916
質問者

補足

丁寧な回答ありがとうございます。 ですが、僕の勉強不足でわからないところが多々ありますのでよろしければ教えてください。 まず、13p+5q=1となるものを求めれば、なぜ逆元が求まるのですか? それと、2=5-(13-5*2)*1=13*(-1)+5*3の真ん中から右の式へはどのように考えるのですか?

その他の回答 (3)

回答No.4

自動処理については、機能的にはできると思いますが 私はよく知りません(ごめん(^^;)実はVBをあまり使ったことがないのです)。 「Do while(1)」と書くと「Loop」までを無限に繰り返します。 このプログラムでは 途中の「If ... Then GoTo Ext」で「:Ext」の位置に飛ぶことで ループを抜け出しています。 Int(x)は「xを超えない最大の整数」です。 例えばInt(3.14) = 3、Int(-4,2) = -5となります。

naoki0916
質問者

お礼

何回もありがとうございました。 自動処理についてはまた質問してみます。

回答No.3

ExcelのVBAのプログラムを示します。 セルA1に値を、B1に法を入れて走らせれば C1に最大公約数が、D1に逆元が表示されます。 不当な値を入れた場合の処理は 盛り込んでいないので注意してください。 Sub Euclid() a = Cells(1, 1): b = Cells(1, 2) x = a: y = b: z = 1: w = 0 Do While (1) q = Int(x / y) r = x - q * y If r = 0 Then GoTo Ext x = y y = r tmp = z z = w w = tmp - q * w Loop Ext: w = w - (Int(w / b)) * b If w < 0 Then w = w + b Cells(1, 3) = y If y = 1 Then Cells(1, 4) = w Else Cells(1, 4) = "逆元なし" End Sub

naoki0916
質問者

補足

Do while (1)とIntは、どういう意味なんですか? あと、数値とか法の数とかを変えたときに勝手にマクロを実行するようにできますか?

回答No.2

「補足」を拝見しました。 分からないところがあれば何度でも聞いてください。 >13p+5q=1となるものを求めれば、なぜ逆元が求まるのですか? 逆元の定義はOKですか? 「自分と演算したら単位元になる相手」でしたね。 んでもって単位元とは 「誰と演算しても相手を変化させないヤツ」です。 modの世界では加法の単位元は0、乗法の単位元は1です。 したがって、「5の(mod 13)における乗法の逆元」といえば、 5×● ≡ 1(mod 13)、すなわち [5×●] ÷ 13 = ■ 余り 1 となる●を求めればよい。 例えば、あてずっぽうに「●は7かな?」と試すと、 5 × 7 = 35 35 ÷ 13 = 2 余り 9 となって、余りが1にならないのでダメ(逆元でない)です。 これに対し「●は8だろうか」と試せば 5 × 8 = 40 40 ÷ 13 = 3 余り 1 となり、「ビンゴ!」です。 上の2式をまとめて書き直すと、 5×8 = 13×3 + 1 という形をしています。「13×3」を移項すれば 13×(-3) + 5×8 = 1 となり、右辺の「1」を左辺の「13p + 5q」の形に 書き換えたことになります。 だから、「1」を「基準形」に変形することが目標となるわけです。 >2=5-(13-5*2)*1=13*(-1)+5*3の真ん中から右の式へはどのように考えるのですか? これは文字で書けば一目瞭然です。 数字のままだとどうしても計算してしまいたくなってしまいますよね(^^;) そこをグッとこらえて、13と5は崩さずに変形しているのです。 なにせ「2」というシンプルな数を わざわざ「13p + 5q」の形にしたいわけですから。 いま、13をs、5をtと書くことにして、 同じことをやり直してみます。 (a)3 = s - 2t (b)2 = t - 3×1 (a)の「3」を(b)に代入すると (b')2 = t - (s - 2t)×1 = -s + 3t これを数字に戻すと (b')2 = 13×(-1) + 5×3 となります。

naoki0916
質問者

補足

ありがとうございます。 わかりやすい説明で、すぐに理解することができました。 参考URLにC言語によるプログラムがあったんですけど、VBではないですか? あと、EXCELでこれをするにはどうしたらいいですか?

関連するQ&A

  • ユークリッド互除法の意義

    2つの数の最大公約数の求め方の1つとしてユークリッド互除法を学習しました。 しかし、最大公約数の求め方は素因数分解でも求められます。 共通に割り切れるもので割っていけばよいので、わざわざユークリッド互除法を使わなくてもいいのでは?と思うのですが、ユークリッド互除法を使うことのよさってあるのですか? 回答よろしくお願いいたします。

  • ユークリッド互除法

    29441と32934の最大公約数をユークリッド互除法で求めて答えが1とでました。さらに最小公倍数を求めろとあるのですが、ユークリッド法でどうやって最小公約数を求めるのですか?

  • ユークリッドの互除法について

     ユークリッドの互除法を使って最大公約数、整数解を求められると聞いたのですが、イマイチ要領がつかめません。    もしよろしければ、どなたかユークリッドの互除法での最大公約数、整数解の求め方を教えてください。

  • ユークリッドの互除法について

    13を9で割ると 1.444…の循環小数で表せますが, このわり算の筆算ができる理由をユークリッドの互除法で説明したいと考えています。 ユークリッドの互除法について いくつかの文献を読みましたが どれも 最大公約数を求める方法として紹介されています。 筆算ができる理由としてユークリッドの互除法をどのように使えばよいか ご回答の程よろしくお願いします。

  • 最大公約数

    素因数分解を使わない最大公約数の求め方で、二つはユークリッドの互除法を利用するというのはわかったのですが、3つはどのようにして求めればいいと思いますか?

  • 最大公約数について

    ユークリッドの互除法について勉強していて 途中で疑問に思ったことがあるのですが 例えば 288と108という数について 288と108の最大公倍数は36 288÷108=2余り72 ここから 108と72を取り出して この二つの数の最大公倍数も36 108÷72=1余り36 ここから72と36を取り出して、 この二つの数の最大公倍数も36 となりますが、なぜ割る数と余りの最大公倍数が、初めの数の最大公約数とずっと同じであり続けるのでしょうか? ユークリッドの互除法自体はある程度理解できています。 ユークリッドの互除法は、この数の動きを利用して最大公約数を求めていくようですが、なぜこのようなことになるのかが知りたいです。 難しい内容では理解できないので、できれば中学生レベルでも理解できるように説明してもらえればありがたいです。

  • 2^91-1と2^65-1の最大公約数

    2^91-1と2^65-1の最大公約数を求めるにはどうすればいいのですか? これほど大きな値だと共通の素数で割ることもユークリッドの互除法も使えそうにありません。 ちなみにコンピュータに解いてもらったら GCD(2^91-1,2^65-1)=8191 でした。

  • Mapleにて

    ユークリッドの互除法とwhile文を用いて,2つの自然数の最大公約数を与える手続きをMapleで書きたいのです. 式をひとつで済ませたいのですが・・・。(2つで書くことはできてます)

  • ユークリッドの互除法がわからない

    ユークリッドの互除法は、どうして割っていくと公約数が求められるのですか? 公約数を求めるやり方はわかったのですが、どうしてそうなるのかわかりません。 調べて説明や証明を読んでもチンプンカンプンでした。 わかりやすく教えていただけたら嬉しいです。 よろしくお願いします。

  • ユークリッドの互除法について(高1数学)

    いつも大変お世話になっております。 ユークリッドの互除法についての質問です。 計算のやり方は知っているので、答えは出せるのですが、なぜそのように計算すると計算結果が最大公約数になるのかがよくわかりません。 私の持っている問題集には、以下のように解説があります。  「N=M×a+Lのとき、NとMの最大公約数は、MとLの最大公約数と等しい。      理由は、   N=M×a+Lなので、MとLの公約数は、Nの約数 ・・・(1)   L=N-M×aなので、NとMの公約数は、Lの約数 ・・・(2)」 とあります。  (1)、(2)のそれぞれは理解できるのですが、その先がよくわかっておりません。    アドバイスいただけると助かります。  よろしくお願い致します。