昨日は投稿するの忘れて寝てた.
酒飲んだら鼻詰まりが悪化して寝れなくなるので, もう絶対酒は飲まない(特にこの時期は).
少し前までmpn_sec_invertよりも速い逆数計算をやろうと息巻いていたが, mpz_invertと比べたら圧倒的に敗北していた. mpz_invertはEEAを使っていた.
mpn_sec_invertもおそらくmpz_invertに近い速度が出せるはずだが, わざと速度を落としている可能性がある(そういう意味でのsec_).
mpz_invertよりも速い逆数計算を実装するのは無理そう. EEAを自分で実装しても勝てないし, p-2乗でよい場合でもバイナリ法とか駆使したところで勝てない.
この件で思うことは,
・セキュリティを意識するなら自前実装はやめたほうがいいかも
・娯楽として高速化実装をやるのはあり
・楽しい
mpn_sec_invertより数usec速くできた〜ってやってる裏で, mpz_invertは2usecもしないうちに計算が終わってる.