📖

定数除算最適化再考1

に公開
2
GitHubで編集を提案

Discussion

Mizar/みざーMizar/みざー

1/dc/2^a で近似したとき、どの程度除算の結果が一致するかを数え上げさせる問題を作っていました。どの程度まで完全一致するかを見る際の、検算程度の応用はできるかもしれません。

https://yukicoder.me/problems/no/2440

問題

Q 個のクエリが与えられる。

i 番目のクエリ (1\leq i\leq Q) では、整数 N_i,D_i,M_i,S_i が与えられる。
1\leq n\leq N_i かつ \displaystyle\left\lfloor\frac{n}{D_i}\right\rfloor=\left\lfloor\frac{M_i\times n}{2^{S_i}}\right\rfloor となるような 整数 n がいくつあるかを数え上げ、 C_i とおく。
この整数 C_i を答えよ。

制約

  • 1\le Q\le 10000
  • N_i = 10^{18}\quad(1\le i\le Q)
  • 1\le D_i\le 10^{18}\quad(1\le i\le Q)
  • 0\le M_i\le 10^{18}\quad(1\le i\le Q)
  • 0\le S_i\le 120\quad(1\le i\le Q)
  • 入力はすべて整数
Mizar/みざーMizar/みざー

Accuracy of Integer Division Approximate Functions は Floor sum を用いた解法を想定した問題です。 Floor sum は以下のような問題です:

https://atcoder.jp/contests/practice2/tasks/practice2_c

問題

この問題は T ケース与えられます。
N,M,A,B が与えられます。
\sum_{i=0}^{N−1}\mathrm{floor}((A\times i+B)/M) を求めてください。

制約

  • 1\le T\le 100,000
  • 1\le N,M\le 10^9
  • 0\le A,B\lt M

注: Accuracy of Integer Division Approximate Functions においては、上記 Floor sum の入力制約を 1\le N\le 10^{18}\simeq 0.87\times 2^{60},\ 1\le M\le 2^{120}\simeq 1.33\times 10^{36},\ 0\le A,B\le 10^{36} 程度に緩めたもの(計算途中は最大で 2^{180} 程度の値が現れる恐れがある)を考慮する必要があります。

Floor sum の大まかな説明としては kyopro_friends さんの説明が解りやすいかと思います。

https://x.com/kyopro_friends/status/1304063876019793921
https://x.com/kyopro_friends/status/1304065446950305792

Floor sum についての他の解説:

https://atcoder.jp/contests/practice2/editorial/579
https://qiita.com/sounansya/items/51b39e0d7bf5cc194081
https://qiita.com/AkariLuminous/items/3e2c80baa6d5e6f3abe9#4-floor_sum