現在、拡張ユークリッド互除法を用いて逆元を計算する方法を学習しております。
法pにおけるaの逆元を求める式
aの逆元 ≡ −(p % a)^-1 × (p/a) (mod. p)
上記の式で逆元が求まることは理解したのですが、
式をプログラミングに落とし込んだ際に、
「なぜpから「(p%a)^-1 × (p/a)」を引いてるのか」がわかりません。
c++
1// 法pにおけるaの逆元を求めるプログラム 2// inv[i]は法pにおけるiの逆元を表す 3inv[a] = p - inv[p%a] * (p/a) % p; 4 // ^ 5 // なぜpから inv[p%a]*(p/a)%pを引いているのかがわからない
個人としては、式を素直にプログラムに落とし込むのであれば
以下で問題ないのではと考えております。
c++
1inv[a] = -inv[p%a] * (p/1) %p
「pから引いている理由」についてご教示いただければ幸甚でございます。
どうぞよろしくお願いいたします。
【参考にしたサイト】
https://drken1215.hatenablog.com/entry/2018/06/08/210000
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/25 07:27