整型函数

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}$$ .

以上是关于整型函数的主要内容,如果未能解决你的问题,请参考以下文章

字符串中数字与整型数字的转化

VSCode自定义代码片段8——声明函数

使用从循环内的代码片段中提取的函数避免代码冗余/计算开销

在 Visual Studio 中创建构造函数的代码片段或快捷方式

调用模板化成员函数:帮助我理解另一个 *** 帖子中的代码片段

Java程序片段