Целочисленные функции

В математике и информатике мы часто сталкиваемся с необходимостью «перевести» вещественные величины в целочисленные термины: подсчитать количество полных шагов, определить номер интервала, выделить остаток от деления или просто отбросить дробную часть. Однако интуитивные идеи вроде округления оказываются недостаточно точными для формального анализа — они либо неоднозначны, либо не обладают нужными алгебраическими или топологическими свойствами.

Именно для строгого и универсального описания таких операций были введены целочисленные функции — прежде всего, функции пола и потолка, а также связанные с ними дробная часть и остаток по модулю. Эти функции, несмотря на кажущуюся простоту, лежат в основе глубоких математических конструкций: от теории делимости и алгоритмов до спектрального анализа чисел, теории вероятности и даже теории игр.

В этом тексте мы систематизируем базовые целочисленные функции, их ключевые свойства и взаимосвязи, а также покажем, как с их помощью моделировать дискретные структуры, возникающие из непрерывных величин.

Пол и потолок

Простое округление не подходит для формальных систем: оно неоднозначно (особенно вблизи полуцелых значений) и не согласуется строго с порядком на числовой прямой. В отличие от таких эвристик, функции пола и потолка, введённые Кеннетом Айверсоном в начале 1960‑х годов, однозначно определены для любого вещественного числа, естественно связаны с неравенствами и позволяют точно переводить аналитические утверждения в дискретные.

Функции пол и потолок

Пол (floor) — функция, округляющее число вниз

x   ⁣=def   ⁣наибольшее целое, не превышающее x=max {nZ:nx}\lfloor x \rfloor \defeq \text{наибольшее целое, не превышающее}~ x = \max\limits~ \{ n \in \ZZ : n \le x \}

Потолок (ceil) — функция, округляющее число вверх

x   ⁣=def   ⁣наименьшее целое, не меньшее x=min {nZ:nx}\lceil x \rceil \defeq \text{наименьшее целое, не меньшее}~ x = \min\limits~ \{ n \in \ZZ : n \ge x \}

В целых точках значения функций пола и потолка совпадают, а в нецелых точках значения отличаются на 11:

x=x=xxZиx=x1xZ\lfloor x \rfloor = x = \lceil x \rceil \Leftrightarrow x \in \ZZ \quad\text{и}\quad \lfloor x \rfloor = \lceil x \rceil - 1 \Leftrightarrow x \notin \ZZ

Симметрия относительно нуля. Функции пола и потолка зеркально связаны: отражение числа относительно нуля «переворачивает» порядок, а значит, меняет и направление округления:

x=xиx=x\lfloor -x \rfloor = - \lceil x \rceil \quad\text{и}\quad \lceil -x \rceil = - \lfloor x \rfloor

Эта симметрия часто упрощает доказательства: достаточно разобрать случай x0x \ge 0, а отрицательный получится автоматически.

Перевод равенств в неравенства. Самое ценное в функциях пола и потолка — их эквивалентные характеристики через неравенства. Например, утверждение x=n\lfloor x \rfloor = n равносильно двум условиям: nx<n+1n \le x < n+1. Это очень удобный инструмент для доказательств, ведь он позволяет нам мгновенно переходить от равенства к системе неравенств, с которой гораздо проще работать. Вот четыре ключевых эквивалентности:

x=n    nx<n+1x=n    x1<nxx=n    n1<xnx=n    xn<x+1\align{ \lfloor x \rfloor = n &\iff n \le x < n + 1 \\ \lfloor x \rfloor = n &\iff x-1 < n \le x \\ \lceil x \rceil = n &\iff n-1 < x \le n \\ \lceil x \rceil = n &\iff x\le n < x+1 \\ }

Обратите внимание: каждая из эквивалентностей задаёт интервал, в который попадает xx, если его пол (или потолок) равен nn.

Пол числа всегда не больше самого числа, а потолок числа всегда не меньше самого числа. В сочетании с соответствующими равенствами для целых чисел эти факты дают нам способ немного огрубив неравенство записать его в терминах целых чисел:

x<n    x<nn<x    n<xxn    xnnx    nx\align{ x < n &\iff \lfloor x \rfloor < n \\ n < x&\iff n<\lceil x \rceil \\ x \le n &\iff \lceil x \rceil \le n\\ n \le x &\iff n \le \lfloor x\rfloor }

Давайте разберём простой пример, чтобы закрепить навыки обращения со свойствами функций пола и потолка. Вопрос: верно ли неравенство

x=xпри x0\bigl\lfloor \sqrt{\lfloor x \rfloor} \bigr\rfloor = \lfloor \sqrt x \rfloor \quad\text{при}~ x \ge 0

Очевидно, это равенство справедливо, когда xx — целое число, ведь тогда x=x\lfloor x \rfloor = x. Но оно также оказывается верным и для π\pi, и для ee, и для ϕ\vphi... Наша безуспешная попытка найти какой-либо опровергающий пример наводит на мысль, что равенство справедливо и в общем случае. Давайте попробуем его доказать.

Давайте использовать разобранные выше свойства для доказательства. Попробуем каким-либо образом «разобрать» левую часть x\bigl\lfloor \sqrt{\lfloor x \rfloor} \bigr\rfloor, избавившись от корня и внешнего пола. Затем уберём внутренний пол x\lfloor x \rfloor. А потом вновь «соберём» выражение, но уже в виде x\lfloor \sqrt{x} \rfloor.

Пусть m=xm = \lfloor \sqrt{\lfloor x \rfloor} \rfloor. Это целое число.

Перейдём от равенства к двойному неравенству, избавившись от от наружного пола:

m=x    mx<m+1m = \bigl\lfloor \sqrt{\lfloor x \rfloor} \bigr\rfloor \implies m \le \sqrt{\lfloor x \rfloor} < m+1

Поскольку все три части этой конструкции неотрицательны, смело возводим их в квадрат, чтобы избавиться от квадратного корня:

m2x<(m+1)2m^2 \le \lfloor x \rfloor < (m+1)^2

Теперь избавимся от оставшегося пола, оценив его с обоих сторон. Используем два неравенства nxnxn \le \lfloor x \rfloor \Leftrightarrow n \le x и n<xn<xn < \lfloor x \rfloor \Leftrightarrow n < x при nZn \in \ZZ. Поскольку mm — целое число, значит и m2m^2, и (m+1)2(m+1)^2 тоже целые, и эти неравенства мы можем применять.

m2x<(m+1)2m^2 \le x < (m+1)^2

А теперь не составляет труда восстановить проделанное в обратном порядке. Извлечем квадратные корни

mx<m+1m \le \sqrt{x} < m+1

А это классическое определение функции пол. Перейдём от неравенства к равенству и получим

m=xm = \lfloor \sqrt{x} \rfloor

Таким образом, мы начали с m=xm = \bigl\lfloor \sqrt{\lfloor x \rfloor} \bigr\rfloor и, используя только наши свойства, пришли к m=xm = \lfloor \sqrt{x} \rfloor. Значит

x=x\bigl\lfloor \sqrt{\lfloor x \rfloor} \bigr\rfloor = \lfloor \sqrt{x} \rfloor

Наше утверждение оказалось верным.

1

Сколько целых чисел содержится на интервалах: [a,b][a, b], (a,b](a, b] и [a,b)[a, b) при a,bRa, b \in \RR и aba \le b?

2
Сколько чисел в последовательности 1,2,3,,n1, 2, 3, \dotsc, n, которые:
  • a) делятся на p1p1?
  • b) делятся на p2p2?
  • c) делятся и на p1p1, и на p2p2?
  • Выразите ответ через floor.
    3
  • a) Чему равен lg35\lceil \lg 35 \rceil? ( lg\lg — двоичный логарифм).
  • b) Кстати говоря, 3510=100011235_{10} = 100011_{2}. Заметьте связь между этим ответом и количеством бит в двоичной записи числа.
  • c) Верно ли, что для n1n \ge 1 количество бит равно lgn+1\lfloor \lg n \rfloor + 1?
  • d) Как с помощью функций пола/потолка получить точное равенство для количества бит, работающее и для n=0n=0?
  • 4
    Чему равно количество цифр в десятичной записи натурального числа NN?
    6
  • Приведите такой пример, где xx\bigl\lceil \sqrt{\lfloor x \rfloor} \bigr\rceil \ne \bigl\lceil \sqrt{x} \bigr\rceil.
  • Найдите закономерность для чисел, нарушающих это равенство.
  • Функция пол позволяет нам исследовать удивительные свойства иррациональных чисел.

    Задолго до того, как это стало знаменитой математической задачей, лорд Рэлей в своей "Теории звука" изучал, как взаимодействуют несоизмеримые частоты и оказалось, что задача сводится к чистой теории чисел. Мы получаем инструмент, чтобы оцифровать иррациональный процесс и знакомимся с понятием спектра.

    Спектр числа

    Спектром некоторого вещественного числа α\alpha называется бесконечное мультимножество (множество с повторяющимися элементами) целых чисел:

    Spec(α)={kαkN}Spec(\alpha) = \bigl\{ \lfloor k\alpha \rfloor \mid \forall\, k \in \NN \bigr\}

    Например, для рационального числа Spec(1/3)={0,0,1,1,1,2,}Spec(1/3) = \{ 0, 0, 1, 1, 1, 2, \dotsc \}. Но настоящая магия начинается, когда α\alpha иррационально.

    Рассмотрим, например, два мультимножества:

    Spec(2)={1,2,4,5,7,8,9,11,12,14,15,16,18,19,21,22,24,}Spec(2+2)={3,6,10,13,17,20,23,27,30,34,37,40,44,47,51,}\align{ Spec(\sqrt{2}) &= \{1, 2, 4, 5, 7, 8, 9, 11, 12, 14, 15, 16, 18, 19, 21, 22, 24, \dotsc \}\\ Spec(2+\sqrt{2}) &= \{3, 6, 10, 13, 17, 20, 23, 27, 30, 34, 37, 40, 44, 47, 51, \dotsc \} }

    Более внимательное рассмотрение показывает, что два этих спектра связаны друг с другом гораздо более удивительным образом: получается так, что любое целое положительное число, отсутствующее в одном спектре, присутствует в другом, но никакое число не содержится одновременно в обоих!

    Разбиение всех целых положительных чисел

    И это действительно так — все целые положительные числа представляют собой объединение непересекающихся множеств Spec(2) и Spec(2+2)Spec(\sqrt{2}) ~\text{и}~ Spec(2+\sqrt{2}). Говорят, что эти спектры образуют разбиение всех целых положительных чисел. Строгое доказательство этого красивого факта мы оставляем для самых искушенных читателей.

    Сами же спектры иррациональных чисел (такие как Spec(2)Spec(\sqrt{2})) носят имя последовательностей Битти.

    Тот факт, что спектры чисел 2\sqrt{2} и 2+22+\sqrt{2} идеально дополняют друг друга, не является случайным совпадением. Это проявление жесткого арифметического закона. Чтобы два иррациональных числа могли поделить между собой натуральный ряд, они должны находиться в особой гармонической связи.

    Теорема Битти

    Пусть α\alpha и β\beta — положительные иррациональные числа. Множества Spec(α)Spec(\alpha) и Spec(β)Spec(\beta) образуют разбиение множества натуральных чисел N\NN тогда и только тогда, когда выполняется соотношение:

    1α+1β=1\frac{1}{\alpha} + \frac{1}{\beta} = 1

    На первый взгляд спектр иррационального числа кажется хаотичным набором целых чисел. Однако функция пола накладывает на него строгие структурные ограничения.

    Свойство двух шагов

    Рассмотрим упорядоченную последовательность элементов спектра xn=nαx_n = \lfloor n\alpha \rfloor. Разность между соседними элементами Δn=xn+1xn\Delta_n = x_{n+1} - x_n может принимать только два значения:

    Δn{α,  α+1}\Delta_n \in \{ \lfloor \alpha \rfloor, \; \lfloor \alpha \rfloor + 1 \}

    Вернемся к нашему примеру с α=21.41\alpha = \sqrt{2} \approx 1.41. Тогда α=1\lfloor \alpha \rfloor = 1. Значит, шаги в спектре могут быть только 11 или 22.

    Последовательности Битти находят красивое применение в анализе Игры Витхоффа.

    Представьте две кучки камней. Двое игроков по очереди делают ход. Разрешается два типа ходов:

    1. Взять любое количество камней из одной кучки.

    2. Взять одинаковое количество камней из обеих кучек сразу.

    Выигрывает тот, кто забирает последний камень. Анализ показывает, что существует набор проигрышных позиций — если вы в них попали и противник играет оптимально, ваше поражение неизбежно.

    Стратегия Витхоффа

    Пара чисел n,mn, m для которых nmn \le m является проигрышной позицией тогда и только тогда, когда она является парой чисел из спектров золотого сечения:

    n=kϕ,m=kϕ2n = \lfloor k \vphi \rfloor, \quad m = \lfloor k \vphi^2 \rfloor

    где ϕ=1+52\vphi = \frac{1+\sqrt{5}}{2}, а kk — номер хода. Заметьте, что так как 1ϕ+1ϕ2=1\frac{1}{\vphi} + \frac{1}{\vphi^2} = 1, эти позиции покрывают все возможные варианты, никогда не повторяясь.

    Упражнения

      1
      Докажите, что если α<β\alpha < \beta, то для спектров Spec(\alpha)\text{ и }Spec(eta) выполняется следующее: начиная с некоторого номера, каждый элемент Spec(α)Spec(\alpha) не превосходит соответствующего элемента Spec(β)Spec(\beta).
      2
      Верно ли, что Spec(α)Spec(\alpha) является подмножеством Spec(β)Spec(\beta)? (Приведите пример или контрпример).
      3
      Докажите, что в спектре любого вещественного числа α>1\alpha > 1 не могут встречаться два подряд идущих натуральных числа. Какие числа обязательно будут пропущены?
      4
      Найдите первые три проигрышные позиции в игре Витхоффа, используя формулу спектров.

    Мы только что видели, как функция пол помогает нам анализировать структуры, порожденные иррациональными числами.

    Теперь вернемся к целочисленной арифметике. При делении n на mn\text{ на }m функция пол дает нам точное частное: n/m\lfloor n/m \rfloor.

    Эта же самая операция, как мы сейчас увидим, служит фундаментом для формального определения остатка — краеугольного камня всей дискретной математики.

    Операция взятия остатка

    Если m и nm \text{ и } n — целые положительные числа, то частное от деления m на nm \text{ на } n равно n/m\lfloor n/m \rfloor. Нам также полезно иметь обозначение и для остатка от этого деления — обозначим его nmodmn \bmod m.

    Свяжем воедино:

    n=mn/m+nmodmn = m \cdot \lfloor n/m \rfloor + n \bmod m

    Чтобы распространить эту идею на произвольные вещественные числа, нам необходимо формальное определение. Оно элегантно строится на той же функции пол, которую мы только что использовали для частного.

    MOD как остаток от деления

    xmody=xyx/yx\bmod y = x - y \lfloor x/y \rfloor

    для x,yRx,y \in \RR

    MOD является бинарной операцией. Обратите внимание, что она имеет приоритет выше сложения/вычитания, поэтому скобки намерено опущены. Число после MOD называется модулем, а само выражение xmodyx \bmod y читается как «икс по модулю игрек».

    Вообразим себя бегущими по кругу с длиной окружности yy, точкам которой приписаны вещественные числа из интервала [0,y)[0, y). Если, взяв старт в точке 00, пробежать некоторое расстояние xx по окружности, мы остановимся в точке xmodyx \bmod y. (А пока мы бегаем, точка 0 встретится нам x/y\lfloor x/y \rfloor раз.)

    Из нашего формального определения xyx/yx - y \lfloor x/y \rfloor логически вытекают важные свойства остатка:

    y>0    0xmody<yy<0    y<xmody0\align{ y > 0 &\implies 0 \le x \bmod y < y\\ y < 0 &\implies y < x \bmod y \le 0 }

    В частности, xmod0=xx \bmod 0 = x (пробежались по окружности нулевой длины).

    В статье основы модулярной арифметики вводится целый раздел, порождаемый операцией MOD. Я же остановлюсь здесь на интересном факте.

    Представим, что нужно определить положение маятника или фазу волны в какой-то момент времени. Неважно, сколько полных колебаний совершено, важна только текущая фаза. Эта задача сводится к отбрасыванию целой части или, по-другому, к извлечению...

    Дробная часть числа

    Операция xmod1x \bmod{1} — элегантный способ мгновенно получить дробную часть числа

    Теорема Вейля

    Есть знаменитая теорема Вейля о том, что если α\alpha — иррациональное число, то последовательность {nα}\{n \cdot \alpha\} (то есть nαmod1 при n=1,2,3...n \cdot \alpha \mod{1} \text{ при }n=1, 2, 3...) будет равномерно распределена по всему отрезку [0,1)[0, 1). Она никогда не попадет в одну точку дважды, но со временем "заполнит" весь отрезок, как бы хаотично, но при этом нигде не оставляя пустот. Это основа многих генераторов псевдослучайных чисел.

    Пусть ω=(xn) (n=1,2,)\omega = (x_n) ~ (n=1, 2, \dots) — заданная последовательность действительных чисел. Для положительного целого числа NN и подмножества EE промежутка II введем счетчик A(E;N;ω)A(E; N; \omega), по определению равный количеству членов xn (1nN)x_n ~ (1 \le n \le N), для которых {xn}E\{x_n\} \in E. При отсутствии опасности путаницы буду писать A(E;N)A(E; N) вместо A(E;N;ω)A(E; N; \omega). Вот основное определение:

    Равномерное распределение по модулю 1

    Последовательность ω=(xn) (n=1,2,)\omega = (x_n) ~ (n=1, 2, \dots) действительных чисел равномерно распределена по модулю 1 (сокращенно р.р. mod 1\bmod \text{ }1 ), если для любой пары a,ba, b действительных чисел, для которых 0a<b10 \le a < b \le 1, имеем:

    limNA([a,b);N;ω)N=ba.(1.1)\lim\limits_{N \to \infty} \frac{A([a, b); N; \omega)}{N} = b - a. \quad (1.1)

    Обозначим теперь через c[a,b)c_{[a, b)} характеристическую функцию интервала [a,b)I[a, b) \subseteq I. Тогда (1.1) можно записать в форме:

    limN1Nn=1Nc[a,b)({xn})=01c[a,b)(x)dx.(1.2)\lim\limits_{N \to \infty} \frac{1}{N} \sum\limits_{n=1}^{N} c_{[a, b)}(\{x_n\}) = \int\limits_{0}^{1} c_{[a, b)}(x) \,dx. \quad (1.2)

    Это замечание дает следующий критерий:

    Критерий Вейля

    Последовательность (xn) (n=1,2,)(x_n) ~ (n=1, 2, \dots) действительных чисел р.р. mod 1\bmod \text{ }1 тогда и только тогда, когда для любой действительной непрерывной функции ff, определенной на замкнутом интервале I=[0,1]\overline{I} = [0, 1], имеем:

    limN1Nn=1Nf({xn})=01f(x)dx.(1.3)\lim\limits_{N \to \infty} \frac{1}{N} \sum\limits_{n=1}^{N} f(\{x_n\}) = \int\limits_{0}^{1} f(x) \,dx. \quad (1.3)

    Пусть (xn)(x_n) р.р. mod 1\bmod \text{ }1 , а f(x)=i=0k1di[x   ⁣   ⁣[ai,ai+1)]f(x) = \sum\limits_{i=0}^{k-1} d_i \cdot \bigl[ x \;\! \in \;\! [a_i, a_{i+1}) \bigr] — ступенчатая функция, определенная на I\overline{I}, причем 0=a0<a1<<ak=10 = a_0 < a_1 < \dots < a_k = 1. Из (1.2) следует, что для любой такой функции ff справедливо уравнение (1.3).

    Предположим теперь, что ff действительная непрерывная функция, определенная на I\overline{I}. Из определения интеграла Римана вытекает, что для любого заданного ε>0\varepsilon > 0 существуют две ступенчатые функции f1f_1 и f2f_2 такие, что f1(x)f(x)f2(x)f_1(x) \le f(x) \le f_2(x) при всех xIx \in \overline{I} и

    01(f2(x)f1(x))dxε.\int\limits_{0}^{1} \bigl( f_2(x) - f_1(x) \bigr) \,dx \le \varepsilon.

    Тогда справедлива следующая цепочка неравенств:

    01f(x)dxε01f1(x)dx=limN1Nn=1Nf1({xn})limN1Nn=1Nf({xn})   ⁣   ⁣limN1Nn=1Nf({xn})limN1Nn=1Nf2({xn})=01f2(x)dx01f(x)dx+ε,\align{ \int\limits_{0}^{1} f(x) \,dx - \varepsilon &\le \int\limits_{0}^{1} f_1(x) \,dx = \lim\limits_{N \to \infty} \frac{1}{N} \sum\limits_{n=1}^{N} f_1(\{x_n\}) \\ &\le \varliminf_{N \to \infty} \frac{1}{N} \sum\limits_{n=1}^{N} f(\{x_n\}) \;\! \le \;\! \varlimsup_{N \to \infty} \frac{1}{N} \sum\limits_{n=1}^{N} f(\{x_n\}) \\ &\le \lim\limits_{N \to \infty} \frac{1}{N} \sum\limits_{n=1}^{N} f_2(\{x_n\}) = \int\limits_{0}^{1} f_2(x) \,dx \\ &\le \int\limits_{0}^{1} f(x) \,dx + \varepsilon, }

    так что в случае непрерывной функции ff имеет место (1.3).

    Обратно, пусть задана последовательность (xn)(x_n) и предполагается, что (1.3) выполнено для любой действительной непрерывной функции ff, определенной на I\overline{I}. Пусть [a,b)[a, b) — произвольный подынтервал II. Для любого заданного ε>0\varepsilon > 0 существуют две непрерывные функции g1g_1 и g2g_2 такие, что g1(x)c[a,b)(x)g2(x)g_1(x) \le c_{[a, b)}(x) \le g_2(x) при xIx \in \overline{I} и в то же время

    01(g2(x)g1(x))dxε.\int\limits_{0}^{1} (g_2(x) - g_1(x)) \,dx \le \varepsilon.

    Тогда имеем:

    baε01g2(x)dxε   ⁣   ⁣01g1(x)dx=limN1Nn=1Ng1({xn})limNA([a,b);N)N   ⁣   ⁣limNA([a,b);N)NlimN1Nn=1Ng2({xn})=01g2(x)dx   ⁣   ⁣01g1(x)dx+εba+ε.\align{ b - a - \varepsilon &\le \int\limits_{0}^{1} g_2(x) \,dx - \varepsilon \;\! \le \;\! \int\limits_{0}^{1} g_1(x) \,dx \\ &= \lim\limits_{N \to \infty} \frac{1}{N} \sum\limits_{n=1}^{N} g_1(\{x_n\}) \\ &\le \varliminf_{N \to \infty} \frac{A([a, b); N)}{N} \;\! \le \;\! \varlimsup_{N \to \infty} \frac{A([a, b); N)}{N} \\ &\le \lim\limits_{N \to \infty} \frac{1}{N} \sum\limits_{n=1}^{N} g_2(\{x_n\}) \\ &= \int\limits_{0}^{1} g_2(x) \,dx \;\! \le \;\! \int\limits_{0}^{1} g_1(x) \,dx + \varepsilon \\ &\le b - a + \varepsilon. }

    Так как ε\varepsilon сколь угодно мало, то отсюда вытекает (1.1).

      1
      Чему равно (((πmod1)mod1)mod1)(((\pi \bmod 1)\bmod 1)\dotsc\bmod 1) ?
      2
      Чему равен I=0100(x(mod1))dxI = \int\limits_{0}^{100} (x \pmod 1) \,dx ?
      3

      Возьмем рациональное α=3/7\alpha = 3/7. Рассмотрим последовательность an=(n3/7)mod1a_n = (n \cdot 3/7) \bmod 1.

      "Заполнит" ли эта последовательность отрезок [0,1)[0, 1)?

      Сколько уникальных точек она породит? Будет ли множество таких точек счётным?

      4
      Докажите, что теорема Вейле не выполняется для рациональных чисел.