整型函数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了整型函数相关的知识,希望对你有一定的参考价值。
整型函数
1. 整型函数
整数是离散数学的支柱. 我们很多时候, 都要将分数转化为整数. 为此, 我们定义了两个整值函数: 顶, 底.
$\lceil x\rceil$ 表示 $\ge x$ 的最小整数, 读作 " $x$ 的顶 " .
$\lfloor x\rfloor$ 表示 $\le x$ 的最大整数, 读作 " $x$ 的底 " .
从多个角度定义一个概念, 这样有利于对概念的理解和应用.
我们尝试从几何上解释它: 给定一条自下而上的数轴, $\lceil x\rceil$ 就是从 $x$ 点出发, 向上扫描找到的第一个整点, $\lfloor x\rfloor$ 就是从 $x$ 点出发, 向下扫描找到的第一个整点.
几何上还有第二个解释, 我们尝试建立平面直角坐标系.
我们还附加定义了 $x$ 的小数部分 $\left\{ x \right\}$ : $$\left\{ x \right\} = x - \lfloor x \rfloor$$
2. 性质
我们要弄清整值函数的性质, 并用一些简单的例子加以理解, 进而有更深远的应用.
性质1 $\lceil x\rceil = x\Leftrightarrow x为整数 \Leftrightarrow \lfloor x\rfloor = x$ .
性质2 $\lceil x\rceil - \lfloor x\rfloor = [x不为整数]$ .
这是一个机智的命题, 揭示了 $\lceil x\rceil$ 与 $\lfloor x\rfloor$ 之间的一个关系.
性质3 $x-1 < \lfloor x\rfloor \le x \le \lceil x\rceil < x+1$ .
性质4 $\lfloor -x\rfloor = -\lceil x\rceil$ .
$\lceil -x\rceil = -\lfloor x\rfloor$ .
性质5 整值函数等于整数 n 的等价条件
$\lfloor x\rfloor = n \Leftrightarrow n\le x<n+1 \Leftrightarrow x-1<n\le x$
$\lceil x\rceil = n\Leftrightarrow n-1<x\le n \Leftrightarrow x\le n<x+1$
性质6 整值函数与整数 n 的不等关系的等价条件
左闭右开, 顶函数: $a\le x<b \Leftrightarrow \lceil a\rceil \le x < \lceil b \rceil$ .
左开右闭, 底函数: $a < x\le b \Leftrightarrow \lfloor a\rfloor < x \le \lfloor b\rfloor$ .
通常配套使用的还有结论: 当 $a, n$ 都为整数时, $a < n \Leftrightarrow a+1\le n$ .
性质7 $\lfloor a+b \rfloor = \lfloor a\rfloor + \lfloor b\rfloor + \lfloor \left\{ a \right\} + \left\{ b \right\} \rfloor = \lfloor a\rfloor + \lfloor b \rfloor + 0或1$ .
当 $a+b$ 为整数时, $\left\{ a \right\} + \left\{ b \right\} = [a, b都不是整数]$ .
区间整点个数
思路: 先根据性质6转化为整点, 然后整点可以方便统计.
$[\alpha, \beta]$ : $\lfloor\beta\rfloor - \lceil\alpha\rceil + 1$ .
$[\alpha, \beta)$ : $\lceil \beta \rceil - \lceil \alpha\rceil$ .
$(\alpha, \beta]$ : $\lfloor \beta\rfloor - \lfloor \alpha \rfloor$ .
$(\alpha, \beta)$ : $\lceil \beta \rceil - \lfloor \alpha \rfloor - 1$ .
分段求和
[51NOD 1225] 约数之和
题意
给定 $n(n \le {10}^{12})$ , 求 $\sum_{k = 1}^n (n \mod k)$ .
分析
$\lfloor \frac{n}{k} \rfloor$ 的取值个数为 $O(\sqrt n)$ .
当 $k \le \sqrt{n}$ 时, 取值个数为 $O(\sqrt n)$ .
当 $k > \sqrt{n}$ 时, $0 < \frac{n}{k} < \sqrt{n}$ , 取值个数为 $O(\sqrt n)$ .
怎么快速找出来 ?
$\lfloor \frac{n}{k} \rfloor = x \Leftrightarrow x \le \frac{n}{k} < x+1 \Leftrightarrow \frac{n}{x+1} < k \le \frac{n}{x} \Leftrightarrow \lfloor \frac{n}{x+1} \rfloor < k \le \lfloor \frac{n}{x} \rfloor$ .
最小的左端点为 $1$ , 我们可以求出值, 求出右端点, 右端点的下一位为下一个左端点, 以此类推.
实现
1 inline int calc(LL n) { 2 int sum = 0; 3 for (LL l = 1, r, x; l <= n; l = r+1) { 4 x = n/l, r = n/x; 5 (sum += 1LL * compute(l, r) * (x % MOD) % MOD) %= MOD; 6 } 7 return sum; 8 }
小结
对于 $\sum_{i = 1} ^ n g(i) f(\lfloor \frac{n}{i} \rfloor)$ , 考虑根据 $\lfloor \frac{n}{i} \rfloor$ 的个数进行分段求和, 还要求能快速求出 $g$ 的前缀和.
[BZOJ 2440] 无平方因子数
前 $n$ 个数的无平方因子数个数为 $F(n) = \sum_{i = 1} ^ n \mu ^ 2 (n) = \sum_{i = 1} ^ {\sqrt{n}} \mu(i) \lfloor \frac{n}{i ^ 2} \rfloor$ , 分段求和 $O(n ^ {\frac{1}{3}})$ , 直接求和 $O(n ^ {\frac{1}{2}})$ .
这里证明一下 $\lfloor \frac{n}{i ^ 2} \rfloor$ 有多少段. 我们设一个阈值 $T$ , 小于 $T$ 的数不超过 $T$ 个, 大于 $T$ 的数不超过 $\frac{n}{T ^ 2}$ 个, 所以总数不超过 $T + \frac{n}{T ^ 2}$ 个. 令 $T = \frac{n}{T ^ 2}$ 即 $T = n ^ {\frac{1}{3}}$ , 所以段数为 $O(n ^ {\frac{1}{3}})$ .
应用5 顶与底的和式
思想: 设 $t = \lfloor f(x)\rfloor$ , 然后把 $t$ 一层层地给等价地拆掉.
$$\begin{aligned}W & = \sum_{n = 1}^N [\lfloor \sqrt[3]{n} \rfloor | n] \\ & = \sum_{n, t}[t | n][t = \lfloor \sqrt[3]{n} \rfloor][1\le n\le N] \\ & = \sum_{n, t}[t | n][t \le \sqrt[3]{n} < t+1][1\le n\le N] \\ & = \sum_{n, t}[t | n][t^3 \le n < {(t+1)}^3][1\le n\le N] \\ & = \sum_{t, k}[t^3 \le tk < (t+1)^3][1 \le tk \le N]\end{aligned}$$
令 $K = \sqrt[3]{N}$ .
$$\begin{aligned}W & = \sum_{1 \le t < K, k}[t^2 \le k < t^2 + 3t + 3 + \frac{1}{t}] + \sum_{k}[K^2 \le k \le N] \\ & = \sum_{1 \le t < K} (\lceil t^2 + 3t + 3 + \frac{1}{t} \rceil - \lfloor t^2 \rfloor ) + (\lfloor N \rfloor - \lceil K^2 \rceil + 1) \\ &= \Sigma_1^K (3t + 4) \delta t + N - \lceil K^2 \rceil + 1 = ...\end{aligned}$$
$$\sum_{0\le k < n}\lfloor \sqrt{k} \rfloor$$ .
设 $t = \lfloor \sqrt{k} \rfloor$ , 将 $\lfloor\rfloor$ 拆掉, 分类处理, 先讨论 $n = a^2$ , 再补充剩余项.
应用6 谱
定义实数 $\alpha$ 的谱为 $$Spec(\alpha) = \left\{ \lfloor n\alpha \rfloor \right\}$$ .
证明 $Spec(\sqrt 2)\cup Spec(2 + \sqrt{2}) = \mathbb{N}^+$ 且 $Spec{\sqrt 2}\cap Spec(2+\sqrt{2}) = \emptyset$ .
思路: 只要证明前 $N$ 个整数在两个谱中出现的次数之和为 $N$ , 这样既保证了不相交, 有保证了全部存在.
谱 $Spec(\alpha)$ 中 $\le N$ 的数的个数.
这里综合应用了性质6, 和辅助的等价关系, 还有性质2.
$$\begin{aligned}N(\alpha, n) & = \sum_{k > 0}[\lfloor k\alpha \rfloor \le n] \\ & = \sum_{k > 0}[\lfloor k\alpha \rfloor < n+1] \\ & = \sum_{k > 0}[k\alpha < n+1] \\ & = \sum_{k > 0}[k < \frac{n+1}{\alpha}] \\ & = \lceil \frac{n+1}{\alpha} \rceil - 1 = \lfloor \frac{n+1}{\alpha} \rfloor\end{aligned}$$
证明, 这里用到了性质7.
$$\begin{aligned}N(\sqrt 2, n) + N(2+\sqrt{2}, n) & = \lfloor \frac{n+1}{\sqrt 2}\rfloor + \lfloor \frac{n+1}{2 + \sqrt 2} \rfloor \\ & = \frac{n+1}{\sqrt 2} + \frac{n+1}{2 + \sqrt{2}} - \left\{ \frac{n+1}{\sqrt 2} + \frac{n+1}{2 + \sqrt{2}} \right\} \\ & = n+1 - 1 = n\end{aligned}$$ .
以上是关于整型函数的主要内容,如果未能解决你的问题,请参考以下文章
在 Visual Studio 中创建构造函数的代码片段或快捷方式