No.2440 Accuracy of Integer Division Approximate Functions
タグ : / 解いたユーザー数 12
作問者 : 👑 Mizar / テスター : 👑 amentorimaru
問題文
$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$ を答えよ。
$\lfloor\cdot\rfloor$ 記号 と $C_i$ の数学的定義と説明(ここをクリックで開閉します)
-
$\lfloor\cdot\rfloor$ 記号の数学的定義と説明
- "$\lfloor x\rfloor$" は、実数 $x$ に対し、 $x$ を超えない最大の整数を返す関数であり、 $\lfloor x\rfloor=\max\{n\in\mathbb{Z}\mid n\leq x\}$ と定義する。
- "$\mathbb{Z}$" は、「整数全体の集合」を意味する。
- "$n\in\mathbb{Z}$" は、「$n$ は 『整数全体の集合』に属する」、つまり「$n$ は整数」を意味する。
- "$\{n\in\mathbb{Z}\mid n\leq x\}$" は、「$x$ 以下の整数からなる集合」を意味する。
- "$\max\{n\in\mathbb{Z}\mid n\leq x\}$" は、「『$x$ 以下の整数からなる集合』のうち、最大の要素」、つまり「$x$ を超えない最大の整数」を意味する。
"$\displaystyle\left\lfloor\frac{n}{D_i}\right\rfloor$" は、「"$\displaystyle\frac{n}{D_i}$" を超えない最大の整数」を意味する。
"$\displaystyle\left\lfloor\frac{M_i\times n}{2^{S_i}}\right\rfloor$" は、「"$\displaystyle\frac{M_i\times n}{2^{S_i}}$" を超えない最大の整数」を意味する。
-
$C_i$ の数学的定義と説明
$\displaystyle C_i = \#\left\{n\in\mathbb{Z}\ \middle|\ 1\leq n\leq N_i,\ \left\lfloor\frac{n}{D_i}\right\rfloor=\left\lfloor\frac{M_i\times n}{2^{S_i}}\right\rfloor\right\}\quad(1\leq i\leq Q)$
"$\displaystyle\left\{n\in\mathbb{Z}\ \middle|\ 1\leq n\leq N_i,\ \left\lfloor\frac{n}{D_i}\right\rfloor=\left\lfloor\frac{M_i\times n}{2^{S_i}}\right\rfloor\right\}$" は、 "$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$" の集合を意味する。
"$\displaystyle\#\left\{n\in\mathbb{Z}\ \middle|\ 1\leq n\leq N_i,\ \left\lfloor\frac{n}{D_i}\right\rfloor=\left\lfloor\frac{M_i\times n}{2^{S_i}}\right\rfloor\right\}$" は、 "$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$" の集合の要素数を意味する。
有限集合 $A$ の要素数は $n(A)$ や $|A|$ のように表記する方法もあるが、 $n$ の文字や $|$ の記号が重複するため、ここでは $\#A$ のような表記を用いている。
入力
$Q$ $N_1\ D_1\ M_1\ S_1$ $N_2\ D_2\ M_2\ S_2$ $N_3\ D_3\ M_3\ S_3$ $\ \,\vdots$ $N_Q\ D_Q\ M_Q\ S_Q$
- $1\leq Q\leq 10000$
- $N_i = 10^{18}\quad(1\leq i\leq Q)$
- $1\leq D_i\leq 10^{18}\quad(1\leq i\leq Q)$
- $0\leq M_i\leq 10^{18}\quad(1\leq i\leq Q)$
- $0\leq S_i\leq 120\quad(1\leq i\leq Q)$
- 入力はすべて整数
出力
$C_1$ $C_2$ $C_3$ $\ \,\vdots$ $C_Q$
$Q$ 行出力せよ。 $i\ (1\leq i\leq Q)$ 行目 には、 $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$ を出力せよ。
サンプル
サンプル1
入力
7 1000000000000000000 1 1 0 1000000000000000000 1 0 120 1000000000000000000 3 1 1 1000000000000000000 3 1 2 1000000000000000000 47 196241958230952677 63 1000000000000000000 998244353 155014655926305585 87 1000000000000000000 1000000007 618970015309900031 89
出力
1000000000000000000 0 2 5 996563582276314846 1000000000000000000 999999999859993400
$n$ が 整数 かつ $1\leq n\leq 10^{18}$ において、
$\displaystyle\left\lfloor\frac{n}{1}\right\rfloor=\left\lfloor\frac{1\times n}{2^{0}}\right\rfloor$ は成り立ちます。 $(C_1=1000000000000000000)$
$\displaystyle\left\lfloor\frac{n}{1}\right\rfloor=\left\lfloor\frac{0\times n}{2^{120}}\right\rfloor$ は成り立ちません。 $(C_2=0)$
$\displaystyle\left\lfloor\frac{n}{3}\right\rfloor=\left\lfloor\frac{1\times n}{2^{1}}\right\rfloor$ が成り立つのは $n\in\{1,3\}$ の時のみです。 $(C_3=2)$
$\displaystyle\left\lfloor\frac{n}{3}\right\rfloor=\left\lfloor\frac{1\times n}{2^{2}}\right\rfloor$ が成り立つのは $n\in\{1,2,4,5,8\}$ の時のみです。 $(C_4=5)$
-
$\displaystyle\left\lfloor\frac{n}{47}\right\rfloor=\left\lfloor\frac{196241958230952677 \times n}{2^{63}}\right\rfloor$ は必ずしも成り立ちません。 $(C_5=996563582276314846)$
例えば、 $\displaystyle\left\lfloor\frac{10^{18}-4}{47}\right\rfloor=21276595744680850,\ \left\lfloor\frac{196241958230952677 \times (10^{18}-4)}{2^{63}}\right\rfloor=21276595744680851$ なので、 $n=10^{18}-4=999999999999999996$ の時は $\displaystyle\left\lfloor\frac{n}{D_i}\right\rfloor=\left\lfloor\frac{M_i\times n}{2^{S_i}}\right\rfloor$ が成り立ちません。
$\displaystyle\left\lfloor\frac{n}{998244353}\right\rfloor=\left\lfloor\frac{155014655926305585 \times n}{2^{87}}\right\rfloor$ は成り立ちます。 $(C_6=1000000000000000000)$
-
$\displaystyle\left\lfloor\frac{n}{1000000007}\right\rfloor=\left\lfloor\frac{618970015309900031 \times n}{2^{89}}\right\rfloor$ は必ずしも成り立ちません。 $(C_7=999999999859993400)$
例えば、 $\displaystyle\left\lfloor\frac{10^{18}-50}{1000000007}\right\rfloor=999999992,\ \left\lfloor\frac{618970015309900031 \times (10^{18}-50)}{2^{89}}\right\rfloor=999999993$ なので、 $n=10^{18}-50=999999999999999950$ の時は $\displaystyle\left\lfloor\frac{n}{D_i}\right\rfloor=\left\lfloor\frac{M_i\times n}{2^{S_i}}\right\rfloor$ が成り立ちません。
オーバーフローに注意してください。
提出するには、Twitter 、GitHub、 Googleもしくは右上の雲マークをクリックしてアカウントを作成してください。