21:43ウィキぺディアでモンゴメリ乗算を検索すると、わかり易く詳しい説明が載っている。残念ながらこの説明全体をプログラミングしたものが見つからなかったのでC++ソースを書いてみた。ここまでで、今後計算に必要になる、r2,n,nb,n2が得られる。r2,n,nb,n2をメンバ変数とする。計算が重いので、(これが早ければ、そもそもモンゴメリ演算の必要がない)nを法とするモンゴメリクラスを作成するのが良いです。冪剰余演算等は、モンゴメリクラスのMethodにします。※ここで書いた乗算は「乗算剰余演算」の項の上段にある方法です。(注)ここでのBigintクラスは、多倍長整数を格納する仮想のクラスであり、実在するものではありません。(k:=被除数のbit数)とすれば、逆数を求める部分((2^(2k)-1)/y)の回復法もまた特殊な被除数のため、簡単なものに変形できる。(xb*2-1);}この方法は、被除数bit数の倍のループとなり、これが最大の減算回数になります。誤差が出ないので乗算は1回だけで済みます。前回の方法はbit差に依存したループ回数なので多桁にも応用できますが、この方法だと被除数が大きいとループ回数が多くなってしまいます。桁差が小さい時に有利な方法ニュートン法を使った2進多桁の整数除算(注)ここでのBigintクラスは、多倍長整数を格納する仮想のクラスであり、実在するものではありません。(k:=被除数のbit数)とすれば、逆数を求める部分((2^k)/y)の回復法は特殊な被除数のため、簡単なものに変形できる。計算量は最大でもbit差程度の加減算と2回の乗算なのでbit差が数100のオーダーならNewton法を使うより有利かも。ニュートン法を使った2進多桁の整数除算(注)ここでのBigintクラスは、多倍長整数を格納する仮想のクラスであり、実在するものではありません。HTML5版ModifiedSimpson御坂黒岳の黒石SSLマルチサイトのテスト環境ベネッセ個人情報流出XPは終わりですか。