Нумерология: никакого гадания, только теория чисел
В данной статье речь пойдёт о таких понятиях теории чисел, как цифровой корень и ведический квадрат.
Данная статья ничего не говорит о нумерологии, кроме того, что это псевдонаучная концепция.
Цель данной статьи: показать математические закономерности вокруг вычисления цифрового корня и его связь с циклическими числами.
Введение
Несколько дней назад я решил написать незатейливую статью про нумерологическое сложение. Моей целью было показать, что даже такая незамысловатая операция может иметь большое количество интересных закономерностей. Многие из этих закономерностей я нашёл ещё в школьное время, когда скучал на уроках географии. При внимательном рассмотрении я нашёл больше закономерностей, чем ожидал, и это привело меня назад к моей любимой теме full reptend prime.
После я внимательно изучил то, что нашёл, узнал, что многие из этих понятий уже существуют, и решил переписать статью заново, чтобы опираться на общеизвестные понятия. Помимо известных понятий я добавил собственные визуализации, чтобы сделать чтение немного более увлекательным.
Сумма цифр и цифровой корень
Цифровой корень натурального числа в заданной системе счисления — это значение, получаемое итеративным расчётом суммы цифр, где на первой итерации происходит расчёт суммы цифр натурального числа, а на каждой следующей — расчёт суммы цифр результата предыдущей итерации. Операция выполняется до тех пор, пока вычисленное значение не становится меньше заданной системы счисления, т.е. до тех пор, пока оно не равняется одной-единственной цифре.
Аддитивная стойкость натурального числа — это количество итераций, на которых нужно применить операцию суммы цифр, для того чтобы получить цифровой корень.
Пример: Цифровая сумма числа 142857 равна 1 + 4 + 2 + 8 + 5 + 7 = 27
Цифровая сумма числа 27 равна 2 + 7 = 9
Как следствие, цифровой корень числа 142857 = 9, аддитивная стойкость 142857 = 2.
Код для вычисления цифрового корня в произвольной системе счисления на языке Python:
Применение цифровой суммы
Цифровые суммы применялись при расчёте контрольных сумм для проверки арифметических операций ранних компьютеров. Ранее, в эпоху ручного счета, Фрэнсис Исидор Эджуорт предложил использовать суммы 50 цифр, взятых из математических таблиц логарифмов, в качестве формы генерации случайных чисел; если предположить, что каждая цифра случайна, то по центральной предельной теореме эти цифровые суммы будут иметь случайное распределение, близкое к гауссову распределению.
Цифровая сумма двоичного представления числа известна как вес Хэмминга или численность населения. Алгоритмы выполнения этой операции были изучены, и она была включена в качестве встроенной операции в некоторые компьютерные архитектуры и некоторые языки программирования. Эти операции используются в вычислительных приложениях, включая криптографию, теорию кодирования и компьютерные шахматы.
Улучшение алгоритма вычисления цифрового корня
При расчёте цифрового корня можно воспользоваться небольшой хитростью: если значение не равно нулю, и не равно основанию системы счисления — 1, можно получить значение цифрового корня просто операцией взятия остатка от деления на основание системы счисления — 1.
Свойства цифрового корня
Операция сложения
Сделаем небольшую таблицу, для того чтобы изучить закономерности, каким образом вычисляется цифровой корень суммы двух чисел:

Таблица для анализа операции цифрового корня суммы двух чисел.
Код для построения таблицы суммы:
Как можно увидеть, цифровой корень суммы чисел равен цифровому корню суммы цифровых корней этих чисел:
Операция вычитания
Формула похожа на предыдущую, однако совпадает не полностью.
Приведем контрпример: 455 — 123 = 332.
Как можно отметить, выражение 4 — 6 не даёт в результате 8, потому формулу сложения нужно модифицировать, чтобы она работала для операции вычитания:
Операция умножения
Выведем вариацию таблицы умножения, для того чтобы исследовать эту операцию:

Расчет цифрового корня от двух множителей
Код для вывода таблицы умножения:
Запишем значения для каждого множителя:
1) [1, 2, 3, 4, 5, 6, 7, 8, 9]
2) [2, 4, 6, 8, 1, 3, 5, 7, 9]
3) [3, 6, 9, 3, 6, 9, 3, 6, 9]
4) [4, 8, 3, 7, 2, 6, 1, 5, 9]
5) [5, 1, 6, 2, 7, 3, 8, 4, 9]
6) [6, 3, 9, 6, 3, 9, 6, 3, 9]
7) [7, 5, 3, 1, 8, 6, 4, 2, 9]
8) [8, 7, 6, 5, 4, 3, 2, 1, 9]
9) [9, 9, 9, 9, 9, 9, 9, 9, 9]
Можно увидеть, что последовательности разбиваются на пары 1 и 8, 2 и 7, 3 и 6, 4 и 5. В каждой из пар сохраняется та же самая последовательность, но они представляют собой реверсированные копии друг друга, за исключением последнего элемента, который связан с множителем, равным основанию системы счисления — 1.
Также отметим, что при умножении на основание системы счисления -1 цифровой корень будет равен основанию системы счисления — 1. При умножении на 1 значение цифрового корня второго множителя сохраняется.
Последовательности для множителей 1, 2, 3, 4. Они же являются зеркальными для 8, 7, 6, 5.
Последовательности можно рассмотреть как множество всех возможных замкнутых фигур с количеством точек, равным основанию системы счисления — 1, начиная с правильного n-угольника. Исключением является множитель, который не является взаимно простым с основанием системы счисления — 1, в данном случае это 3 и 6.
Для нахождения последовательности любой линии можно записать формулу:
Если записать эти значения как множество пересечений всех множителей, мы получим в результате ведический квадрат.

Ведический квадрат для десятичной системы счисления.
Подмножество данного ведического квадрата формирует собой латинский квадрат. Чтобы получить его, нужно вычеркнуть элементы, равные основанию системы счисления — 1.

Приведение ведического квадрата к латинскому квадрату в десятичной системе счисления.
В результате мы получим:

Подмножество ведического квадрата, составляющее латинский квадрат в десятичной системе счисления.
Если переставить некоторые из его строчек местами, мы получим последовательность циклических чисел. О том, каким образом должны быть осуществлены перестановки строчек, будет рассказано ниже при исследовании других операций с цифровым корнем.
Ниже приведена ещё одна картинка ведических квадратов для систем счисления 100 и 1000. Белым отмечены самые большие значения клеток — соответствующие основанию системы счисления — 1, черным — самые маленькие, соответствующие 1.

Ведические квадраты для систем счисления 100 и 1000.
Теперь вернемся к произведению. Цифровой корень произведения одиночных цифр в заданной системе счисления вычисляется при помощи соответствующего ведического квадрата.
Для вычисления цифрового корня произведения двух чисел, которые содержат больше одной цифры, для начала нужно вычислить цифровой корень каждой из этих цифр, и после этого воспользоваться ведической площадью.
Операция деления
Рассмотрим те числа, которые дают при делении непериодические дроби, это 2, 5, 4, 8.
Для того чтобы быть уверенными, что мы не допускаем ошибок, воспользуемся уже выведенными правилами и умножим результат деления на 1000; так как цифровой корень 1000 равен 1, то произведение будет иметь тот же самый цифровой корень.

Таблица деления для делителей, которые взаимно просты с десятичной системой счисления.
Тут бросаются в глаза несколько закономерностей. Число 9 не только при умножении, но и при делении приводит к значению цифрового корня, равному 9. Интересное происходит также с числами 3 и 6, эти числа как при умножении, так и при делении дают абсолютно одинаковые значения цифрового корня.
Запишем в таблицу череду делений:
2) [5, 1, 6, 2, 7, 3, 8, 4, 9] — Эта последовательность встречалась в множителе 5
4) [7, 5, 3, 1, 8, 6, 4, 2, 9] — Эта последовательность встречалась в множителе 7
5) [2, 4, 6, 8, 1, 3, 5, 7, 9] — Эта последовательность встречалась в множителе 2
8) [8, 7, 6, 5, 4, 3, 2, 1, 9] — Эта последовательность встречалась в множителе 8
Операция деления для цифрового корня определена только для делителей, которые не являются взаимно простыми с основанием системы счисления.
Операция возведения в степень
Таблица возведения в степень:

Таблица возведения в степень в десятичной системе счисления.
Здесь мы можем наблюдать цикличность.
При внимательном рассмотрении других систем счисления можно сделать вывод, что эта череда связана с формированием остатков от деления, и таким образом она связалась с моим любимым классом простых чисел — full reptend prime.
Для того чтобы пояснить это, рассмотрим операции возведения в степень в других системах счисления. Забегая вперед, скажу: наиболее интересными будут являться такие степени счисления, которые равны p^n + 1, где p — это простое число, а n — натуральное.
Рассмотрим систему счисления 8, череда его значений будет равна [1, 3, 2, 6, 4, 5]. Именно такие же остатки от деления мы получаем при делении числа в десятичной системе счисления.
Деление 1 на 7 в столбик. Здесь мы можем наблюдать остатки от деления [1, 3, 2, 6, 4, 5]. Последовательность полученная при возведении в степень, в восьмеричной системе счисления.
Это свойство связано с тем, что вычисление цифрового корня можно осуществить при помощи альтернативной формулы расчета цифрового корня:
Ещё визуализации
Приведём ниже визуализации для операции возведения в степень для разных систем счисления, все они будут связанны с паттернами, образующимися в рациональных дробях 1/P, где P — это full reptend prime.
Остатки от деления, найденные в 6 системе счисления, связанные с числом 5. Остатки от деления, найденные в 10 системе счисления, связанные с квадратом числа 3. Остатки от деления, найденные в 12 системе счисления, связанные с числом 11. Остатки от деления, найденные в 14 системе счисления, связанные с числом 13. Остатки от деления, найденные в 18 системе счисления, связанные с числом 17. Остатки от деления, найденные в 20 системе счисления, связанные с числом 19. Остатки от деления, найденные в 26 системе счисления, связанные с квадратом числа 5. Остатки от деления, найденные в 28 системе счисления, связанные с кубом числа 3.
Теперь приведём несколько картинок из ведических квадратов, принцип их формирования очень прост, потому ограничимся небольшим количеством:
Замкнутая фигура из 6 системы счисления, связана с числом 5. Замкнутые фигуры из 8 системы счисления, связанные с числом 7. Замкнутые фигуры из 12 системы счисления, связанные с числом 11.
Образование циклических чисел при помощи ведической площади и остатков от деления
После того как мы получили латинский квадрат из ведического квадрата, пронумеруем его строки последовательно:

Пронумерованный латинский квадрат.
Теперь мы можем переставить строки на основании череды остатков от деления, таким образом мы получим последовательность циклических чисел. Напомню, остатки от деления были равны [1, 3, 2, 6, 4, 5]. В результате у нас получится следующая картина:

Перестановки в пронумерованном латинском квадрате, в результате мы получили циклическое число.
Как можно наблюдать, первый столбец теперь представляет собой циклическое число 142857.
Выводы
Несмотря на плохую репутацию нумерологии, операции суммы цифр и цифрового корня имеют пусть не широкое, но всё же практическое применение.
Например, с помощью цифрового корня можно сформировать множество замкнутых n-вершинных звезд, многие из которых очень любят современные рок\метал группы 🙂
Пентаграмма — в представлении не нуждается 🙂 Уроборос тут не случайно, о нем в следующей статье!
Tool предпочитают 8 систему счисления, связанную с простым числом 7.
Slipknot тяготеют к десятеричной системе счисления, связанной с квадратом числа 3.
Как можно видеть, многие метал группы тоже любят теорию чисел!
Но лично я для своей метал группы решил выбрать анимированный логотип, составленный из одновременной визуализации периодических дробей, образованных из 90 рациональных дробей 1/91..90/91:
Почему я выбрал число 91, которое является произведением 7 и 13? Речь об этом пойдет в следующей статье 🙂
Если у кого-то есть дополнительная информация об описанных выше понятиях, пожалуйста присылайте её в комментарии, я буду очень благодарен!
Эксперименты с цифровым корнем
Немногие, увлекающиеся теорией чисел, знают про существование такой банальной и многим кажущейся неинтересной процедуры, такой как извлечение цифрового корня из некоторого целого числа.
Что такое цифровой корень ?
Цифровой корень — это небольшая процедура суммирования цифр, составляющих некоторое число, и которая дает некоторую цифру. Однако, не всегда при простом суммировании входящих в число цифр дает однозначное число (т.е некоторую цифру), иногда получается так, что сумма цифр либо двузначное число, либо трехзначное. Но в этом случае, процедура вычисления цифрового корня не останавливается и продолжается, но теперь уже при приложении к двухзначной или трехзначной сумме — и применение процедуры будет продолжено до тех пор, пока на выходе цифрового корня не получится однозначное целое число.
Таким образом, можно заключить, что функция вполне тривиальна и реализуется через рекурсию, однако не все было так просто и с первого раза реализовать вычисление этой функции получилось только для для двухзначных чисел… Несмотря на это устойчивую функцию цифрового корня все-таки удалось реализовать:
Для того, чтобы испытать эту функцию, необходимо ей на выход подать любое целое неотрицательное число: например, для числа 1234 функция ciphroot выдаст 1, а для числа 990 функция выдаст 9.
Эта функция очень интересна тем, что может порождать некоторые простые, но все-таки очень интересные графические эффекты: с ее помощью можно получать простенькие узоры из цветных квадратиков, демонстрирующих любопытную закономерность.
Для того, чтобы увидеть наглядно, как ведет себя цифровой корень на инкрементально возрастающей последовательности неотрицательных целых чисел, можно воспользоваться следующим кодом:
где x,y — это размеры окна с графикой, а w,h — длина и ширина «квадратиков» (строго говоря, прямоугольников).
Этот код работает крайне просто: вначале определяется переменная-накопитель num, которая будет отражать номер квадратика в некоторой матрице квадратиков, а также определяется таблица цветов, которыми будут раскрашены квадратики в матрице (очевидно, что цифровой корень принимает значения от 0 до 9, и поэтому потребуется 10 цветов для раскраски), затем в цикле происходит отрисовка самих квадратиков с выбором их цвета (индексация списков в Icon начинается с 1, поэтому потребуется номер цвета на 1 больше, чем значение, выдаваемое функцией цифрового корня).
Экспериментируя с размерами квадратиков можно получать самые разнообразные покрытия узорами, например:
выдаст вот такую картинку:

Помимо эффектов с квадратиками, функция цифрового корня в сочетании с периодическими функциями может давать крайне забавный эффект, который я назвал «множественные гармоники».
Итак, код эффекта:
И как результат, получаем вот такую забавную картинку:

Немного пояснений о том, как оно работает.
По сути дела, здесь не происходит ничего необычного — эта процедура практически калька с процедуры отрисовки графиков, описанной в ранних статьях этого блога, однако тут есть некоторые нюансы: исходная периодическая функция (в данном случае, синус) умножается в этом примере на цифровой корень от ее аргумента.
Однако, цифровой корень работает только для целых неотрицательных чисел, а в данном отрывке кода он применяется ко всем без исключения числам, в том числе и к отрицательным и к дробным.
Для того, чтобы подобное стало возможным, пришлось ввести несколько предположений, которые были совмещены в небольшой формуле перед описанием функции для построения: первое предположение состоит в том, что при умножении дробном числа с переводом в целое, его цифровой корень не изменяется (и это действительно так !); второе предположение заключается в том, что цифровой корень для отрицательных чисел — неотрицателен.
Исходя из вышеописанного, в принципе можно получить процедуру для получения «спектрального» отображения периодических функций, однако, я этого не сделал 🙂
Напоследок, скриншоты еще парочки функций:


И в заключение: этот эффект с множеством гармоник был получен в ходе случайных экспериментов, но несмотря на это, получилось весьма прикольно.
Кроме того, я придумал процедуру, которая рисует схожим образом целую радугу из одной периодической функции !
Что такое цифровой корень
awoo → Educational Codeforces Round 130 [рейтинговый для Div. 2]
ibraGYM → How to choose university?
SlavicG → Codeforces Round #799 (Div. 4)
Contesting_pov → How to activate tex commands in my browser
HermEs32 → Help Post.
imtheonly1 → encoding problem, Please Help;
Kmes → How to become pupil meme
dronperminov → Онлайн редактор графов с алгоритмами
peltorator → 8-hour Long Stream In Support Of Ukraine (With Great Guests!)
ezraft → rip 400+ day streak
Flavanoid → GNU G++ Problems
spiritedExit0 → help needed with finding a recurrence for the number of ways to fill grid
kamack38 → My GitHub
BiNARy__Beast__ → How Is o(n^2) accepted for problem C(n <= 1e5)?
eng3zim → Is beethoven97 a hacking bot?!
Erering → Why am I not getting rating even though I solved a question in a competition?
r1ddle → Getting Accpted in C++20 but TLE in C++17 With Same Code
n0sk1ll → Editorial for Codeforces Round #798 (Div. 2)
don0thing → Your daily routine!
Svlad_Cjelli → Using Rust for programming contests
Nil_paracetamol → All Div-4 Contest link
chenjb → XXII Open Cup: GP of EDG
pushpavel → (AutoCp) Competitive Programming Plugin for Intellij-Based IDEs
MrPaul_TUser → Разбор задач Codeforces Round #748 (Div.3)
Flavanoid → GNU G++ Problems
Блог пользователя GShark
Раскрытие тайны цифрового корня.
Автор GShark, 7 лет назад ,
Недавно мне посчастливилось подготовить задачу про цифровой корень на Russian Code Cup. В результате прорешивания, а также комментариев к разбору, я заметил, что, к сожалению, отнюдь не каждый осведомлен о свойствах данной функции. Я просто не мог остаться равнодушным к этой проблеме.
Для начала рассмотрим определение цифрового корня, взятое с англоязычной Википедии с моим переводом:
Цифровой корень натурального числа — это цифра, полученная в результате итеративного процесса суммирования цифр, на каждой итерации которого для подсчета суммы цифр берут результат, полученный на предыдущей итерации. Этот процесс повторяется до тех пор, пока не будет получена одна цифра.
Например цифровой корень 65,536 это 7, потому что 6 + 5 + 5 + 3 + 6 = 25 и 2 + 5 = 7.
Для начала заметим очевидное свойство ( dr(n) — цифровой корень числа n ):
dr(n) = n, n ≤ 9
Дальше докажем следующий факт: Сумма цифр числа n имеет такой же остаток при делении на 9, как и число n .
В доказательстве нам понадобится формула
, докажем ее по индукции:
База:
Переход:
.
Нужно доказать
. Просто распишем
Таким образом мы доказали по индукции, что
.
Вернемся к основному доказательству. Пусть
, тогда: n = ak·10 k + ak — 1·10 k — 1 + . a1·10 + a0 . По только что доказанной формуле:
следовательно
. Что и требовалось доказать.
Теперь по только что доказанному утверждению понятно, что остаток при делении на 9 — инвариант относительно взятия цифрового корня, а поскольку сумма цифр числа меньше самого числа, если число больше 9, справедливы следующие две формулы:

Эти две формулы можно собрать объединить формулой:

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