From 45ccdb1fa843405a21eb382289aefd0866183a4d Mon Sep 17 00:00:00 2001 From: tatyam Date: Sat, 1 Jun 2024 02:14:24 +0900 Subject: [PATCH] update ExtGCD.md --- docs/math/ExtGCD.md | 4 ++++ docs/modint/BarrettReduction.md | 2 +- docs/modint/modint.md | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/docs/math/ExtGCD.md b/docs/math/ExtGCD.md index 75d2cfb..ce085fa 100644 --- a/docs/math/ExtGCD.md +++ b/docs/math/ExtGCD.md @@ -11,6 +11,10 @@ documentation_of: //src/math/ExtGCD.hpp - `ll extgcd(ll a, ll b, ll& x, ll& y)`:$\text{gcd}(a, b)$ を返す.$(x, y)$ には,$ax + by = \text{gcd}(a, b)$ の整数解であって $\|x\| + \|y\|$ が最小のものが代入される. - $O(\log(x + y))$ 時間 +## 使い方 (応用) + +- モジュロ逆元 `modinv(a, mod)` を求める:`extgcd(a, mod, x, y)` をすると `a * x + mod * y == 1` になるので,`x` が `a` のモジュロ逆元である. + ## ソラ書きしてみよう $(1, 0, a)$ と $(0, 1, b)$ に対してユークリッドの互除法をするとできる. diff --git a/docs/modint/BarrettReduction.md b/docs/modint/BarrettReduction.md index ffe4a3b..c9ebd39 100644 --- a/docs/modint/BarrettReduction.md +++ b/docs/modint/BarrettReduction.md @@ -22,4 +22,4 @@ documentation_of: //src/modint/BarrettReduction.hpp ## 余談 ジャッジが Ice Lake より前の Intel の CPU の場合,64 bit 除算が double 除算より 3 倍以上遅いことが知られている. -あまりではなく商が欲しい場合,mod が固定ではない場合,もっと短くかきたい場合は,double 除算や long double 除算を書くと良い. +あまりではなく商が欲しい場合,mod が固定ではない場合,もっと短く書きたい場合は,double 除算や long double 除算を書くと良い. diff --git a/docs/modint/modint.md b/docs/modint/modint.md index bafb6c0..477c4bf 100644 --- a/docs/modint/modint.md +++ b/docs/modint/modint.md @@ -6,5 +6,5 @@ documentation_of: //src/modint/modint.hpp - タイプ速度重視の簡易 modint - 速度が欲しいとき:[32 bit で加減算をちゃんと書いた Modint](../extra/modint_fast.hpp) -- mod が素数でないとき:inv を extgcd にする +- mod が素数でないとき:inv を [extgcd](../math/ExtGCD.hpp) にする - mod が実行時に決まり,これを高速化したいとき:[Barrett Reduction](./BarrettReduction.hpp)