P15191 [SWERC 2019] Pseudo-Random Number Generator
题目描述
Donald 热爱自然。作为一名程序员,Donald 编写程序来模拟树木的生长或构建逼真的 3D 景观。为此,Donald 需要一个良好的伪随机数生成器。他设计了以下方法来生成一个无限序列的 40 位无符号整数(绿色行为注释)。
$$
\begin{aligned}
M &:= 1 \ll 40 & \color{green}// &\color{green}= 2^{40} = 1\,099\,511\,627\,776 \\
S(0) &:= \text{0x600DCAFE} & \color{green}// &\color{green}= 1\,611\,516\,670 \\
S(n+1) &:= (S(n) + (S(n) \gg 20) + 12345) \bmod M
\end{aligned}
$$
在最后一行中,$x \gg 20$ 表示 $x$ 除以 $2^{20}$ 的欧几里得除法的商,而 $x \% M$ 表示 $x$ 除以 $M$ 的欧几里得除法的余数。
作为决定这是否真的是一个良好的伪随机数生成器的第一个测试,Donald 希望计算该序列产生的偶数值的数量,以检查这是否足够接近 50%。你的帮助将非常受欢迎。
输入格式
输入仅包含一行,包含一个整数 $N$。
输出格式
输出应包含一行,包含一个整数,对应序列 $S(0), S(1), \ldots, S(N-1)$ 中偶数值的数量。
说明/提示
#### 数据范围
输入满足 $0 \leq N < 2^{63}$。
翻译由 DeepSeek 完成