Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
高速化チャレンジ問題 (for C, C++, Rust, Assembler, etc.): 非負整数 が与えられる。 を で除算した 商 と 余り をそれぞれ求めて答えよ。 制約: 実行時間制限: 2秒 64bit乗算剰余演算向け除算処理 素案 Mizar/みざー 1
Slide 2
Slide 2 text
非負整数 が与えられる。 を で除算した 商 と 余り をそれぞれ求めて答えよ。 素直に C++ (gcc) で実装すると、 128bit ÷ 64bit の除算は __udivmodti4 , __udivti3 , __umodti3 など (128bit整数除算を行うコンパイラ組み込み関数) が用いられる。 除数 で 繰り返し 割り算するという処理の性質を用いて、それらの関数以上にどう高速化 できるかがポイント。 https://godbolt.org/z/c4xboP1s9 AtCoder Library では 除数32bit までを想定した Barrett Reduction の実装がある、これを 若干変形して考える。 https://github.com/atcoder/ac-library/blob/master/atcoder/internal_math.hpp#L22-L61 64bit乗算剰余演算向け除算処理 素案 Mizar/みざー 2
Slide 3
Slide 3 text
非負整数 が与えられる。 を で除算した 商 と 余り をそれぞれ求めて答えよ。 方針: 非負整数 を用いて を と近似し、 の近似値を で求める。 ( : Multiplier Value / Magic Number, : Shift Count) 以下のいずれかを満たす の最小値 (もしくは ) を使い、 とする。 の場合 の場合 64bit乗算剰余演算向け除算処理 素案 Mizar/みざー 3
Slide 4
Slide 4 text
:被除数、 :除数、 :商、 :剰余、 :乗定数、 :論理右シフト数 の場合 の場合 64bit乗算剰余演算向け除算処理 素案 Mizar/みざー 4
Slide 5
Slide 5 text
非負整数 が与えられる。 を で除算した 商 と 余り をそれぞれ求めて答えよ。 が 64bit整数に収まらないケースの補足: もしくは、 を満たす、 非負整数 が となる組しかない場合: とすると であるから 64bit乗算剰余演算向け除算処理 素案 Mizar/みざー 5
Slide 6
Slide 6 text
関連する問題 yukicoder No.2440 Accuracy of Integer Division Approximate Functions https://yukicoder.me/problems/no/2440 個のクエリが与えられる。 番目のクエリ では、整数 が与えられる。 かつ となるような 整数 がいくつあるかを数え上げ、 とお く。この整数 を答えよ。 実行時間制限: 2秒 入力はすべて整数 64bit乗算剰余演算向け除算処理 素案 Mizar/みざー 6
Slide 7
Slide 7 text
除数63.5bit版 除数 , 被除数 の前提条件 除数 に対応する定数 の求め方 定数 を用いた の求め方 ※ の時は、前提より であるため、同様の式にて成り立つ。 64bit乗算剰余演算向け除算処理 素案 Mizar/みざー 7
Slide 8
Slide 8 text
除数31.5bit版 除数 , 被除数 の前提条件 除数 に対応する定数 の求め方 定数 を用いた の求め方 ※ の時は、前提より であるため、同様の式にて成り立つ。 64bit乗算剰余演算向け除算処理 素案 Mizar/みざー 8
Slide 9
Slide 9 text
除数64bit版 除数 , 被除数 の前提条件 除数 に対応する定数 の求め方 定数 を用いた の求め方 ※ の時は、前提より であるため、同様の式にて成り立つ。 64bit乗算剰余演算向け除算処理 素案 Mizar/みざー 9
Slide 10
Slide 10 text
除数32bit版 除数 , 被除数 の前提条件 除数 に対応する定数 の求め方 定数 を用いた の求め方 ※ の時は、前提より であるため、同様の式にて成り立つ。 64bit乗算剰余演算向け除算処理 素案 Mizar/みざー 10