Множительный инструмент на основе теоремы Слонимского

В XIX веке существовали интересные инструменты для умножения, построенные на основе теоремы Слонимского. Это «Снаряд для умножения» Слонимского и бруски Иоффе. Об этих инструментах в интернете невозможно ничего прочитать, кроме скудного описания внешнего вида, ни на что ни годного описания методики работы (в стиле «это работало как-то вот так»), заимствованного из книги «История вычислительной техники» И.А. Апокин, Л.Е. Майстров, «Наука» 1990 г. Описание не раскрывает принцип действия приборов. Литературу, на которую ссылается автор книги, достать неприемлемо сложно. Я решил вскрыть алгоритм работы прибора самостоятельно, а для демонстрации — изготовить собственный аналог.


Цель написания статьи


Эта статья для тех, кто, так же, как и я, интересуется историей вычислительной техники.
Теоретически, хорошее описание указанных инструментов должно быть в книге «Приборы и машины для механического производства арифметических действий: Описание устройства и оценка счет. приборов и машин» / В.Г. фон-Бооль. — Москва: типо-лит. т-ва И.Н. Кушнерев и К°, 1896. — 244 с.: ил., черт.; 24.
Но до Ленинской библиотеки, где она хранится, я так и не добрался, впрочем это и не важно. Главное, что в Интернете никакой информации, а я хотел, чтобы она была, потому что, надеюсь, не я один озадачился её поиском.

Почему местом размещения статьи выбран Хабр

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

Исходные данные, которые мне удалось найти


В интернете мне попалось описание интересного математического инструмента, разработанного З.Я. Слонимским.

В середине прошлого века З.Я. Слонимский (1810-1904) предложил простое множительное устройство, основанное на доказанной им теореме. Это устройство позволяло получать произведения любого числа (разрядность которого не превышала разрядности устройства ) на любое однозначное число. Другими словами, это было нечто вроде механической таблицы умножения любого числа на 2, 3, 4,..., 9. Позднее теорема Слонимского была использована при создании другого простого множительного устройства (счетных брусков Иоффе).

На основе своей теоремы Слонимский составил таблицу, состоящую из 280 столбцов – по 9 чисел в каждом. Эта таблица нанесена на цилиндры, являющиеся основным элементом устройства. Цилиндры могут перемещаться в двух направлениях: вдоль оси и вокруг нее. На ось, на которой находится цилиндр, надеты также два мини-цилиндра. На поверхность одного мини-цилиндра нанесены числа от 0 до 9, а на поверхность другого – буквы a, b, c, d и цифры (от 1 до 7).

На крышке прибора находятся 11 рядов окошек считывания, в первом (нижнем) ряду видно устанавливаемое число (множимое). Во втором и третьем рядах окошек при установке множимого появляются буквы и цифры. Их сочетание служит ключом для оператора. Благодаря ему он знает, какой винт и насколько нужно повернуть. После этого в 4-11-м рядах окошек появляются числа: в 4-м ряду – произведение множимого на 2, в 5-м – на 3, в 6 – на 4 и т. д. Таким образом, в нашем распоряжении оказывается произведение множимого на все разряды множителя. Теперь остается обычным способом (на бумаге) сложить эти результаты и получить искомое произведение.


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

Счетные бруски были предложены Иоффе в 1881 г. В 1882 г. на Всероссийской выставке они получили почетный отзыв. Принцип работы с ними основан на теореме Слонимского. Прибор Иоффе состоял из 70 четырехгранных брусков. Это позволило разместить на 280 гранях 280 столбцов таблицы Слонимского. Каждый брусок и каждый столбец были помечены, для чего использовались арабские и римские цифры и буквы латинского алфавита. Латинские буквы и римские цифры служили для указания порядка, в котором нужно было размещать бруски, чтобы получить произведение множимого на одноразрядный множитель. Полученные произведения (а их столько, сколько разрядов во множителе) складывались (точно так же как и при использовании множительного устройства Слонимского) с помощью карандаша и бумаги.


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

Оттуда же:
Бооль, в 1896 г. приходит к следующему заключению:“Бруски Иоффе упрощают умножение чисел еще в большей степени, нежели палочки Непера и их видоизменения. После простых остроумных брусков Люка и Жанойя это лучший из арифметических приборов для умножения ”.

Бруски Люка и Жанойя тоже интересная тема, о которой информации ещё меньше, но, статья не о них.

Некоторый результат дал поиск теоремы Слонимского.
Вот что пишет Вестник Сыктывкарского университета. Сер.1. Вып.13.2011. УДК 512.6, 517.987 «К 200-летию со дня рождения создателей вычислительных машин, представленных к демидовской премии, Х.З. Слонимского и Г. Куммера». В.П. Одинец

1. Пусть имеем натуральное число в системе J с основанием r, записанное поразрядно amam-1...a2a1. Умножим его последовательно на 1, 2, 3, ..., r-1, и полученные произведения подпишем одно под другим с соблюдением правила разрядов. В результате получим m+1 столбцов (свободные места слева заполним нулями), каждый из которых содержит r-1 цифру. Расположение цифр в столбце назовём представлением столбца. Умножение всевозможных чисел на 1, 2, ..., r-1 порождает бесконечное множество представлений. Однако при этом число различных представлений конечно и задаётся формулой


Где φ(n) — функция Эйлера, заданная на множестве N натуральных чисел, значение которой (для любого n ∈ N) равно количеству натуральных чисел, не превосходящих n и взаимно простых с n.

2. Пусть теперь r = 10, т.е. система счисления J десятичная. Тогда произведение любой дроби, заключённой между двумя соседними Фареевыми дробями pi/qi и pi+1/qi+1 на числа 1, 2, 3, ..., 9 порождает для целых частей полученных чисел то же представление, что и для целых частей последовательности произведений на числа 1, 2, 3,… 9 Фареевой дроби pi/qi

Полная статья находится здесь.

Формулировка мне не пригодилась. Доказательство теоремы я искать не стал, так сказать, поверил Слонимскому на слово. Важным для моей задачи моментом этой теоремы было то, что «число различных представлений конечно и задаётся формулой ...». И, как следует из теоремы и из конструкции прибора Слонимского, для десятичной системы существует 280 представлений столбцов.

Таблица Слонимского


Для воссоздания прибора, действующего на основе той же математической идеи, я получил таблицу Слонимского по алгоритму, описанному в вышеуказанной статье.
Я вооружился FireBug и начал вычислять.
Далее в статье будут встречаться фрагменты JavaScript. Этот язык — основа моей профессиональной деятельности, поэтому я использовал его. Тем не менее, я полагаю, что использованные мной формулы достаточно просты, чтобы специфика языка не затрудняла их понимания, а в некоторых местах я специально использовал не принятые в JavaScript приёмы, чтобы сделать код более понятным для программистов на других языках.

Согласно статье, для построения основной таблицы Слонимского для десятичной системы счисления, была взята последовательность Фарея
F(9) = {0, 1/9, 1/8, 1/7, 1/6, 1/5, 2/9, 1/4, 2/7, 1/3, 3/8, 2/5, 3/7, 4/9, 1/2, 5/9, 4/7, 3/5, 5/8, 2/3, 5/7, 3/4, 7/9, 4/5, 5/6, 6/7, 7/8, 8/9, 1}. 28 чисел последовательности F(9), кроме 1, были умножены каждое на ряд чисел от 0 до 9 и взяты только целые части полученных произведений. Полученные столбцы чисел пронумерованы в порядке возрастания чисел Фарея начиная с 0.

Значения таблицы получены по формуле
B[c][r] = Math.floor(F[c]*r);

Здесь c — номер столбца, r — номер строки.

Основная таблица Слонимского (B)
r \ c 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1
3 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2
4 0 0 0 0 0 0 0 1 1 1 1 1 1 1 2 2 2 2 2 2 2 3 3 3 3 3 3 3
5 0 0 0 0 0 1 1 1 1 1 1 2 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4
6 0 0 0 0 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 5 5 5 5
7 0 0 0 1 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4 5 5 5 5 5 6 6 6
8 0 0 1 1 1 1 1 2 2 2 3 3 3 3 4 4 4 4 5 5 5 6 6 6 6 6 7 7
9 0 1 1 1 1 1 2 2 2 3 3 3 3 4 4 5 5 5 5 6 6 6 7 7 7 7 7 8

Для получения полной таблицы Слонимского была построена вспомогательная таблица P, представляющая собой таблицу умножения чисел от 0 до 9 в представлении Пифагора.
P[c][r] = c*r;
r \ c 0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 0 0
1 0 1 2 3 4 5 6 7 8 9
2 0 2 4 6 8 10 12 14 16 18
3 0 3 6 9 12 15 18 21 24 27
4 0 4 8 12 16 20 24 28 32 36
5 0 5 10 15 20 25 30 35 40 45
6 0 6 12 18 24 30 36 42 48 54
7 0 7 14 21 28 35 42 49 56 63
8 0 8 16 24 32 40 48 56 64 72
9 0 9 18 27 36 45 54 63 72 81


Каждый столбец таблицы B векторно сложен с каждым столбцом таблицы P. Таким образом получена промежуточная таблица DU, содержащая 280 столбцов.
DU[b*10+p][r] = B[b][r] + P[p][r];
DU
c 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
b 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1
r \ p 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
2 0 2 4 6 8 10 12 14 16 18 0 2 4 6 8 10 12 14 16 18
3 0 3 6 9 12 15 18 21 24 27 0 3 6 9 12 15 18 21 24 27
4 0 4 8 12 16 20 24 28 32 36 0 4 8 12 16 20 24 28 32 36
5 0 5 10 15 20 25 30 35 40 45 0 5 10 15 20 25 30 35 40 45
6 0 6 12 18 24 30 36 42 48 54 0 6 12 18 24 30 36 42 48 54
7 0 7 14 21 28 35 42 49 56 63 0 7 14 21 28 35 42 49 56 63
8 0 8 16 24 32 40 48 56 64 72 0 8 16 24 32 40 48 56 64 72
9 0 9 18 27 36 45 54 63 72 81 1 10 19 28 37 46 55 64 73 82
Продолжение
c 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
b 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3
r \ p 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
2 0 2 4 6 8 10 12 14 16 18 0 2 4 6 8 10 12 14 16 18
3 0 3 6 9 12 15 18 21 24 27 0 3 6 9 12 15 18 21 24 27
4 0 4 8 12 16 20 24 28 32 36 0 4 8 12 16 20 24 28 32 36
5 0 5 10 15 20 25 30 35 40 45 0 5 10 15 20 25 30 35 40 45
6 0 6 12 18 24 30 36 42 48 54 0 6 12 18 24 30 36 42 48 54
7 0 7 14 21 28 35 42 49 56 63 1 8 15 22 29 36 43 50 57 64
8 1 9 17 25 33 41 49 57 65 73 1 9 17 25 33 41 49 57 65 73
9 1 10 19 28 37 46 55 64 73 82 1 10 19 28 37 46 55 64 73 82
Продолжение
c 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
b 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5
r \ p 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
2 0 2 4 6 8 10 12 14 16 18 0 2 4 6 8 10 12 14 16 18
3 0 3 6 9 12 15 18 21 24 27 0 3 6 9 12 15 18 21 24 27
4 0 4 8 12 16 20 24 28 32 36 0 4 8 12 16 20 24 28 32 36
5 0 5 10 15 20 25 30 35 40 45 1 6 11 16 21 26 31 36 41 46
6 1 7 13 19 25 31 37 43 49 55 1 7 13 19 25 31 37 43 49 55
7 1 8 15 22 29 36 43 50 57 64 1 8 15 22 29 36 43 50 57 64
8 1 9 17 25 33 41 49 57 65 73 1 9 17 25 33 41 49 57 65 73
9 1 10 19 28 37 46 55 64 73 82 1 10 19 28 37 46 55 64 73 82
Продолжение
c 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
b 6 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7
r \ p 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
2 0 2 4 6 8 10 12 14 16 18 0 2 4 6 8 10 12 14 16 18
3 0 3 6 9 12 15 18 21 24 27 0 3 6 9 12 15 18 21 24 27
4 0 4 8 12 16 20 24 28 32 36 1 5 9 13 17 21 25 29 33 37
5 1 6 11 16 21 26 31 36 41 46 1 6 11 16 21 26 31 36 41 46
6 1 7 13 19 25 31 37 43 49 55 1 7 13 19 25 31 37 43 49 55
7 1 8 15 22 29 36 43 50 57 64 1 8 15 22 29 36 43 50 57 64
8 1 9 17 25 33 41 49 57 65 73 2 10 18 26 34 42 50 58 66 74
9 2 11 20 29 38 47 56 65 74 83 2 11 20 29 38 47 56 65 74 83
Продолжение
c 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
b 8 8 8 8 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9
r \ p 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
2 0 2 4 6 8 10 12 14 16 18 0 2 4 6 8 10 12 14 16 18
3 0 3 6 9 12 15 18 21 24 27 1 4 7 10 13 16 19 22 25 28
4 1 5 9 13 17 21 25 29 33 37 1 5 9 13 17 21 25 29 33 37
5 1 6 11 16 21 26 31 36 41 46 1 6 11 16 21 26 31 36 41 46
6 1 7 13 19 25 31 37 43 49 55 2 8 14 20 26 32 38 44 50 56
7 2 9 16 23 30 37 44 51 58 65 2 9 16 23 30 37 44 51 58 65
8 2 10 18 26 34 42 50 58 66 74 2 10 18 26 34 42 50 58 66 74
9 2 11 20 29 38 47 56 65 74 83 3 12 21 30 39 48 57 66 75 84
Продолжение
c 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
b 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 11 11 11
r \ p 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
2 0 2 4 6 8 10 12 14 16 18 0 2 4 6 8 10 12 14 16 18
3 1 4 7 10 13 16 19 22 25 28 1 4 7 10 13 16 19 22 25 28
4 1 5 9 13 17 21 25 29 33 37 1 5 9 13 17 21 25 29 33 37
5 1 6 11 16 21 26 31 36 41 46 2 7 12 17 22 27 32 37 42 47
6 2 8 14 20 26 32 38 44 50 56 2 8 14 20 26 32 38 44 50 56
7 2 9 16 23 30 37 44 51 58 65 2 9 16 23 30 37 44 51 58 65
8 3 11 19 27 35 43 51 59 67 75 3 11 19 27 35 43 51 59 67 75
9 3 12 21 30 39 48 57 66 75 84 3 12 21 30 39 48 57 66 75 84
Продолжение
c 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
b 12 12 12 12 12 12 12 12 12 12 13 13 13 13 13 13 13 13 13 13
r \ p 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
2 0 2 4 6 8 10 12 14 16 18 0 2 4 6 8 10 12 14 16 18
3 1 4 7 10 13 16 19 22 25 28 1 4 7 10 13 16 19 22 25 28
4 1 5 9 13 17 21 25 29 33 37 1 5 9 13 17 21 25 29 33 37
5 2 7 12 17 22 27 32 37 42 47 2 7 12 17 22 27 32 37 42 47
6 2 8 14 20 26 32 38 44 50 56 2 8 14 20 26 32 38 44 50 56
7 3 10 17 24 31 38 45 52 59 66 3 10 17 24 31 38 45 52 59 66
8 3 11 19 27 35 43 51 59 67 75 3 11 19 27 35 43 51 59 67 75
9 3 12 21 30 39 48 57 66 75 84 4 13 22 31 40 49 58 67 76 85
Продолжение
c 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
b 14 14 14 14 14 14 14 14 14 14 15 15 15 15 15 15 15 15 15 15
r \ p 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
2 1 3 5 7 9 11 13 15 17 19 1 3 5 7 9 11 13 15 17 19
3 1 4 7 10 13 16 19 22 25 28 1 4 7 10 13 16 19 22 25 28
4 2 6 10 14 18 22 26 30 34 38 2 6 10 14 18 22 26 30 34 38
5 2 7 12 17 22 27 32 37 42 47 2 7 12 17 22 27 32 37 42 47
6 3 9 15 21 27 33 39 45 51 57 3 9 15 21 27 33 39 45 51 57
7 3 10 17 24 31 38 45 52 59 66 3 10 17 24 31 38 45 52 59 66
8 4 12 20 28 36 44 52 60 68 76 4 12 20 28 36 44 52 60 68 76
9 4 13 22 31 40 49 58 67 76 85 5 14 23 32 41 50 59 68 77 86
Продолжение
c 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179
b 16 16 16 16 16 16 16 16 16 16 17 17 17 17 17 17 17 17 17 17
r \ p 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
2 1 3 5 7 9 11 13 15 17 19 1 3 5 7 9 11 13 15 17 19
3 1 4 7 10 13 16 19 22 25 28 1 4 7 10 13 16 19 22 25 28
4 2 6 10 14 18 22 26 30 34 38 2 6 10 14 18 22 26 30 34 38
5 2 7 12 17 22 27 32 37 42 47 3 8 13 18 23 28 33 38 43 48
6 3 9 15 21 27 33 39 45 51 57 3 9 15 21 27 33 39 45 51 57
7 4 11 18 25 32 39 46 53 60 67 4 11 18 25 32 39 46 53 60 67
8 4 12 20 28 36 44 52 60 68 76 4 12 20 28 36 44 52 60 68 76
9 5 14 23 32 41 50 59 68 77 86 5 14 23 32 41 50 59 68 77 86
Продолжение
c 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199
b 18 18 18 18 18 18 18 18 18 18 19 19 19 19 19 19 19 19 19 19
r \ p 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
2 1 3 5 7 9 11 13 15 17 19 1 3 5 7 9 11 13 15 17 19
3 1 4 7 10 13 16 19 22 25 28 2 5 8 11 14 17 20 23 26 29
4 2 6 10 14 18 22 26 30 34 38 2 6 10 14 18 22 26 30 34 38
5 3 8 13 18 23 28 33 38 43 48 3 8 13 18 23 28 33 38 43 48
6 3 9 15 21 27 33 39 45 51 57 4 10 16 22 28 34 40 46 52 58
7 4 11 18 25 32 39 46 53 60 67 4 11 18 25 32 39 46 53 60 67
8 5 13 21 29 37 45 53 61 69 77 5 13 21 29 37 45 53 61 69 77
9 5 14 23 32 41 50 59 68 77 86 6 15 24 33 42 51 60 69 78 87
Продолжение
c 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219
b 20 20 20 20 20 20 20 20 20 20 21 21 21 21 21 21 21 21 21 21
r \ p 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
2 1 3 5 7 9 11 13 15 17 19 1 3 5 7 9 11 13 15 17 19
3 2 5 8 11 14 17 20 23 26 29 2 5 8 11 14 17 20 23 26 29
4 2 6 10 14 18 22 26 30 34 38 3 7 11 15 19 23 27 31 35 39
5 3 8 13 18 23 28 33 38 43 48 3 8 13 18 23 28 33 38 43 48
6 4 10 16 22 28 34 40 46 52 58 4 10 16 22 28 34 40 46 52 58
7 5 12 19 26 33 40 47 54 61 68 5 12 19 26 33 40 47 54 61 68
8 5 13 21 29 37 45 53 61 69 77 6 14 22 30 38 46 54 62 70 78
9 6 15 24 33 42 51 60 69 78 87 6 15 24 33 42 51 60 69 78 87
Продолжение
c 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239
b 22 22 22 22 22 22 22 22 22 22 23 23 23 23 23 23 23 23 23 23
r \ p 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
2 1 3 5 7 9 11 13 15 17 19 1 3 5 7 9 11 13 15 17 19
3 2 5 8 11 14 17 20 23 26 29 2 5 8 11 14 17 20 23 26 29
4 3 7 11 15 19 23 27 31 35 39 3 7 11 15 19 23 27 31 35 39
5 3 8 13 18 23 28 33 38 43 48 4 9 14 19 24 29 34 39 44 49
6 4 10 16 22 28 34 40 46 52 58 4 10 16 22 28 34 40 46 52 58
7 5 12 19 26 33 40 47 54 61 68 5 12 19 26 33 40 47 54 61 68
8 6 14 22 30 38 46 54 62 70 78 6 14 22 30 38 46 54 62 70 78
9 7 16 25 34 43 52 61 70 79 88 7 16 25 34 43 52 61 70 79 88
Продолжение
c 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259
b 24 24 24 24 24 24 24 24 24 24 25 25 25 25 25 25 25 25 25 25
r \ p 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
2 1 3 5 7 9 11 13 15 17 19 1 3 5 7 9 11 13 15 17 19
3 2 5 8 11 14 17 20 23 26 29 2 5 8 11 14 17 20 23 26 29
4 3 7 11 15 19 23 27 31 35 39 3 7 11 15 19 23 27 31 35 39
5 4 9 14 19 24 29 34 39 44 49 4 9 14 19 24 29 34 39 44 49
6 5 11 17 23 29 35 41 47 53 59 5 11 17 23 29 35 41 47 53 59
7 5 12 19 26 33 40 47 54 61 68 6 13 20 27 34 41 48 55 62 69
8 6 14 22 30 38 46 54 62 70 78 6 14 22 30 38 46 54 62 70 78
9 7 16 25 34 43 52 61 70 79 88 7 16 25 34 43 52 61 70 79 88
Продолжение
c 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279
b 26 26 26 26 26 26 26 26 26 26 27 27 27 27 27 27 27 27 27 27
r \ p 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
2 1 3 5 7 9 11 13 15 17 19 1 3 5 7 9 11 13 15 17 19
3 2 5 8 11 14 17 20 23 26 29 2 5 8 11 14 17 20 23 26 29
4 3 7 11 15 19 23 27 31 35 39 3 7 11 15 19 23 27 31 35 39
5 4 9 14 19 24 29 34 39 44 49 4 9 14 19 24 29 34 39 44 49
6 5 11 17 23 29 35 41 47 53 59 5 11 17 23 29 35 41 47 53 59
7 6 13 20 27 34 41 48 55 62 69 6 13 20 27 34 41 48 55 62 69
8 7 15 23 31 39 47 55 63 71 79 7 15 23 31 39 47 55 63 71 79
9 7 16 25 34 43 52 61 70 79 88 8 17 26 35 44 53 62 71 80 89


На её основе построены две таблицы U и D, содержащие соответственно цифры разряда единиц и разряда десятков полученных сумм.

  U[c][r] = DU[c][r] % 10;
  D[c][r] = Math.floor(DU[c][r]/10);

U
c 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
b 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1
r \ p 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
2 0 2 4 6 8 0 2 4 6 8 0 2 4 6 8 0 2 4 6 8
3 0 3 6 9 2 5 8 1 4 7 0 3 6 9 2 5 8 1 4 7
4 0 4 8 2 6 0 4 8 2 6 0 4 8 2 6 0 4 8 2 6
5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5
6 0 6 2 8 4 0 6 2 8 4 0 6 2 8 4 0 6 2 8 4
7 0 7 4 1 8 5 2 9 6 3 0 7 4 1 8 5 2 9 6 3
8 0 8 6 4 2 0 8 6 4 2 0 8 6 4 2 0 8 6 4 2
9 0 9 8 7 6 5 4 3 2 1 1 0 9 8 7 6 5 4 3 2
q 0 0 5 8 11 14 17 19 23 27 0 1 5 8 11 14 17 19 23 27
Продолжение
c 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
b 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3
r \ p 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
2 0 2 4 6 8 0 2 4 6 8 0 2 4 6 8 0 2 4 6 8
3 0 3 6 9 2 5 8 1 4 7 0 3 6 9 2 5 8 1 4 7
4 0 4 8 2 6 0 4 8 2 6 0 4 8 2 6 0 4 8 2 6
5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5
6 0 6 2 8 4 0 6 2 8 4 0 6 2 8 4 0 6 2 8 4
7 0 7 4 1 8 5 2 9 6 3 1 8 5 2 9 6 3 0 7 4
8 1 9 7 5 3 1 9 7 5 3 1 9 7 5 3 1 9 7 5 3
9 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2
q 0 1 5 8 11 14 17 19 23 27 0 1 5 8 11 14 17 20 23 27
Продолжение
c 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
b 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5
r \ p 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
2 0 2 4 6 8 0 2 4 6 8 0 2 4 6 8 0 2 4 6 8
3 0 3 6 9 2 5 8 1 4 7 0 3 6 9 2 5 8 1 4 7
4 0 4 8 2 6 0 4 8 2 6 0 4 8 2 6 0 4 8 2 6
5 0 5 0 5 0 5 0 5 0 5 1 6 1 6 1 6 1 6 1 6
6 1 7 3 9 5 1 7 3 9 5 1 7 3 9 5 1 7 3 9 5
7 1 8 5 2 9 6 3 0 7 4 1 8 5 2 9 6 3 0 7 4
8 1 9 7 5 3 1 9 7 5 3 1 9 7 5 3 1 9 7 5 3
9 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2
q 0 1 5 8 11 14 17 20 23 27 0 1 5 8 11 14 17 20 23 27
Продолжение
c 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
b 6 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7
r \ p 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
2 0 2 4 6 8 0 2 4 6 8 0 2 4 6 8 0 2 4 6 8
3 0 3 6 9 2 5 8 1 4 7 0 3 6 9 2 5 8 1 4 7
4 0 4 8 2 6 0 4 8 2 6 1 5 9 3 7 1 5 9 3 7
5 1 6 1 6 1 6 1 6 1 6 1 6 1 6 1 6 1 6 1 6
6 1 7 3 9 5 1 7 3 9 5 1 7 3 9 5 1 7 3 9 5
7 1 8 5 2 9 6 3 0 7 4 1 8 5 2 9 6 3 0 7 4
8 1 9 7 5 3 1 9 7 5 3 2 0 8 6 4 2 0 8 6 4
9 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3
q 0 1 6 8 11 14 17 20 23 27 0 2 6 8 11 14 18 20 23 27
Продолжение
c 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
b 8 8 8 8 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9
r \ p 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
2 0 2 4 6 8 0 2 4 6 8 0 2 4 6 8 0 2 4 6 8
3 0 3 6 9 2 5 8 1 4 7 1 4 7 0 3 6 9 2 5 8
4 1 5 9 3 7 1 5 9 3 7 1 5 9 3 7 1 5 9 3 7
5 1 6 1 6 1 6 1 6 1 6 1 6 1 6 1 6 1 6 1 6
6 1 7 3 9 5 1 7 3 9 5 2 8 4 0 6 2 8 4 0 6
7 2 9 6 3 0 7 4 1 8 5 2 9 6 3 0 7 4 1 8 5
8 2 0 8 6 4 2 0 8 6 4 2 0 8 6 4 2 0 8 6 4
9 2 1 0 9 8 7 6 5 4 3 3 2 1 0 9 8 7 6 5 4
q 0 2 6 8 12 14 18 20 23 27 0 2 6 9 12 14 18 20 24 27
Продолжение
c 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
b 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 11 11 11
r \ p 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
2 0 2 4 6 8 0 2 4 6 8 0 2 4 6 8 0 2 4 6 8
3 1 4 7 0 3 6 9 2 5 8 1 4 7 0 3 6 9 2 5 8
4 1 5 9 3 7 1 5 9 3 7 1 5 9 3 7 1 5 9 3 7
5 1 6 1 6 1 6 1 6 1 6 2 7 2 7 2 7 2 7 2 7
6 2 8 4 0 6 2 8 4 0 6 2 8 4 0 6 2 8 4 0 6
7 2 9 6 3 0 7 4 1 8 5 2 9 6 3 0 7 4 1 8 5
8 3 1 9 7 5 3 1 9 7 5 3 1 9 7 5 3 1 9 7 5
9 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4
q 0 2 6 9 12 14 18 20 24 27 0 2 6 9 12 14 18 20 24 27
Продолжение
c 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
b 12 12 12 12 12 12 12 12 12 12 13 13 13 13 13 13 13 13 13 13
r \ p 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
2 0 2 4 6 8 0 2 4 6 8 0 2 4 6 8 0 2 4 6 8
3 1 4 7 0 3 6 9 2 5 8 1 4 7 0 3 6 9 2 5 8
4 1 5 9 3 7 1 5 9 3 7 1 5 9 3 7 1 5 9 3 7
5 2 7 2 7 2 7 2 7 2 7 2 7 2 7 2 7 2 7 2 7
6 2 8 4 0 6 2 8 4 0 6 2 8 4 0 6 2 8 4 0 6
7 3 0 7 4 1 8 5 2 9 6 3 0 7 4 1 8 5 2 9 6
8 3 1 9 7 5 3 1 9 7 5 3 1 9 7 5 3 1 9 7 5
9 3 2 1 0 9 8 7 6 5 4 4 3 2 1 0 9 8 7 6 5
q 0 3 6 9 12 14 18 20 24 27 0 3 6 9 13 14 18 20 24 27
Продолжение
c 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
b 14 14 14 14 14 14 14 14 14 14 15 15 15 15 15 15 15 15 15 15
r \ p 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
2 1 3 5 7 9 1 3 5 7 9 1 3 5 7 9 1 3 5 7 9
3 1 4 7 0 3 6 9 2 5 8 1 4 7 0 3 6 9 2 5 8
4 2 6 0 4 8 2 6 0 4 8 2 6 0 4 8 2 6 0 4 8
5 2 7 2 7 2 7 2 7 2 7 2 7 2 7 2 7 2 7 2 7
6 3 9 5 1 7 3 9 5 1 7 3 9 5 1 7 3 9 5 1 7
7 3 0 7 4 1 8 5 2 9 6 3 0 7 4 1 8 5 2 9 6
8 4 2 0 8 6 4 2 0 8 6 4 2 0 8 6 4 2 0 8 6
9 4 3 2 1 0 9 8 7 6 5 5 4 3 2 1 0 9 8 7 6
q 0 3 7 9 13 14 18 21 24 27 0 3 7 9 13 15 18 21 24 27
Продолжение
c 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179
b 16 16 16 16 16 16 16 16 16 16 17 17 17 17 17 17 17 17 17 17
r \ p 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
2 1 3 5 7 9 1 3 5 7 9 1 3 5 7 9 1 3 5 7 9
3 1 4 7 0 3 6 9 2 5 8 1 4 7 0 3 6 9 2 5 8
4 2 6 0 4 8 2 6 0 4 8 2 6 0 4 8 2 6 0 4 8
5 2 7 2 7 2 7 2 7 2 7 3 8 3 8 3 8 3 8 3 8
6 3 9 5 1 7 3 9 5 1 7 3 9 5 1 7 3 9 5 1 7
7 4 1 8 5 2 9 6 3 0 7 4 1 8 5 2 9 6 3 0 7
8 4 2 0 8 6 4 2 0 8 6 4 2 0 8 6 4 2 0 8 6
9 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6
q 0 3 7 9 13 15 18 21 25 27 0 3 7 9 13 15 18 21 25 27
Продолжение
c 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199
b 18 18 18 18 18 18 18 18 18 18 19 19 19 19 19 19 19 19 19 19
r \ p 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
2 1 3 5 7 9 1 3 5 7 9 1 3 5 7 9 1 3 5 7 9
3 1 4 7 0 3 6 9 2 5 8 2 5 8 1 4 7 0 3 6 9
4 2 6 0 4 8 2 6 0 4 8 2 6 0 4 8 2 6 0 4 8
5 3 8 3 8 3 8 3 8 3 8 3 8 3 8 3 8 3 8 3 8
6 3 9 5 1 7 3 9 5 1 7 4 0 6 2 8 4 0 6 2 8
7 4 1 8 5 2 9 6 3 0 7 4 1 8 5 2 9 6 3 0 7
8 5 3 1 9 7 5 3 1 9 7 5 3 1 9 7 5 3 1 9 7
9 5 4 3 2 1 0 9 8 7 6 6 5 4 3 2 1 0 9 8 7
q 0 3 7 9 13 15 18 21 25 27 0 4 7 9 13 15 19 21 25 27
Продолжение
c 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219
b 20 20 20 20 20 20 20 20 20 20 21 21 21 21 21 21 21 21 21 21
r \ p 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
2 1 3 5 7 9 1 3 5 7 9 1 3 5 7 9 1 3 5 7 9
3 2 5 8 1 4 7 0 3 6 9 2 5 8 1 4 7 0 3 6 9
4 2 6 0 4 8 2 6 0 4 8 3 7 1 5 9 3 7 1 5 9
5 3 8 3 8 3 8 3 8 3 8 3 8 3 8 3 8 3 8 3 8
6 4 0 6 2 8 4 0 6 2 8 4 0 6 2 8 4 0 6 2 8
7 5 2 9 6 3 0 7 4 1 8 5 2 9 6 3 0 7 4 1 8
8 5 3 1 9 7 5 3 1 9 7 6 4 2 0 8 6 4 2 0 8
9 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7
q 0 4 7 9 13 16 19 21 25 27 0 4 7 10 13 16 19 21 26 27
Продолжение
c 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239
b 22 22 22 22 22 22 22 22 22 22 23 23 23 23 23 23 23 23 23 23
r \ p 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
2 1 3 5 7 9 1 3 5 7 9 1 3 5 7 9 1 3 5 7 9
3 2 5 8 1 4 7 0 3 6 9 2 5 8 1 4 7 0 3 6 9
4 3 7 1 5 9 3 7 1 5 9 3 7 1 5 9 3 7 1 5 9
5 3 8 3 8 3 8 3 8 3 8 4 9 4 9 4 9 4 9 4 9
6 4 0 6 2 8 4 0 6 2 8 4 0 6 2 8 4 0 6 2 8
7 5 2 9 6 3 0 7 4 1 8 5 2 9 6 3 0 7 4 1 8
8 6 4 2 0 8 6 4 2 0 8 6 4 2 0 8 6 4 2 0 8
9 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8
q 0 4 7 10 13 16 19 22 26 27 0 4 7 10 13 16 19 22 26 27
Продолжение
c 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259
b 24 24 24 24 24 24 24 24 24 24 25 25 25 25 25 25 25 25 25 25
r \ p 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
2 1 3 5 7 9 1 3 5 7 9 1 3 5 7 9 1 3 5 7 9
3 2 5 8 1 4 7 0 3 6 9 2 5 8 1 4 7 0 3 6 9
4 3 7 1 5 9 3 7 1 5 9 3 7 1 5 9 3 7 1 5 9
5 4 9 4 9 4 9 4 9 4 9 4 9 4 9 4 9 4 9 4 9
6 5 1 7 3 9 5 1 7 3 9 5 1 7 3 9 5 1 7 3 9
7 5 2 9 6 3 0 7 4 1 8 6 3 0 7 4 1 8 5 2 9
8 6 4 2 0 8 6 4 2 0 8 6 4 2 0 8 6 4 2 0 8
9 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8
q 0 4 7 10 13 16 19 22 26 27 0 4 8 10 13 16 19 22 26 27
Продолжение
c 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279
b 26 26 26 26 26 26 26 26 26 26 27 27 27 27 27 27 27 27 27 27
r \ p 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
2 1 3 5 7 9 1 3 5 7 9 1 3 5 7 9 1 3 5 7 9
3 2 5 8 1 4 7 0 3 6 9 2 5 8 1 4 7 0 3 6 9
4 3 7 1 5 9 3 7 1 5 9 3 7 1 5 9 3 7 1 5 9
5 4 9 4 9 4 9 4 9 4 9 4 9 4 9 4 9 4 9 4 9
6 5 1 7 3 9 5 1 7 3 9 5 1 7 3 9 5 1 7 3 9
7 6 3 0 7 4 1 8 5 2 9 6 3 0 7 4 1 8 5 2 9
8 7 5 3 1 9 7 5 3 1 9 7 5 3 1 9 7 5 3 1 9
9 7 6 5 4 3 2 1 0 9 8 8 7 6 5 4 3 2 1 0 9
q 0 4 8 10 13 16 19 22 26 27 0 4 8 10 13 16 19 22 27 27

D
c 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
b 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1
r \ p 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1
3 0 0 0 0 1 1 1 2 2 2 0 0 0 0 1 1 1 2 2 2
4 0 0 0 1 1 2 2 2 3 3 0 0 0 1 1 2 2 2 3 3
5 0 0 1 1 2 2 3 3 4 4 0 0 1 1 2 2 3 3 4 4
6 0 0 1 1 2 3 3 4 4 5 0 0 1 1 2 3 3 4 4 5
7 0 0 1 2 2 3 4 4 5 6 0 0 1 2 2 3 4 4 5 6
8 0 0 1 2 3 4 4 5 6 7 0 0 1 2 3 4 4 5 6 7
9 0 0 1 2 3 4 5 6 7 8 0 1 1 2 3 4 5 6 7 8
q 0 0 5 8 11 14 17 19 23 27 0 1 5 8 11 14 17 19 23 27
Продолжение
c 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
b 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3
r \ p 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1
3 0 0 0 0 1 1 1 2 2 2 0 0 0 0 1 1 1 2 2 2
4 0 0 0 1 1 2 2 2 3 3 0 0 0 1 1 2 2 2 3 3
5 0 0 1 1 2 2 3 3 4 4 0 0 1 1 2 2 3 3 4 4
6 0 0 1 1 2 3 3 4 4 5 0 0 1 1 2 3 3 4 4 5
7 0 0 1 2 2 3 4 4 5 6 0 0 1 2 2 3 4 5 5 6
8 0 0 1 2 3 4 4 5 6 7 0 0 1 2 3 4 4 5 6 7
9 0 1 1 2 3 4 5 6 7 8 0 1 1 2 3 4 5 6 7 8
q 0 1 5 8 11 14 17 19 23 27 0 1 5 8 11 14 17 20 23 27
Продолжение
c 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
b 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5
r \ p 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1
3 0 0 0 0 1 1 1 2 2 2 0 0 0 0 1 1 1 2 2 2
4 0 0 0 1 1 2 2 2 3 3 0 0 0 1 1 2 2 2 3 3
5 0 0 1 1 2 2 3 3 4 4 0 0 1 1 2 2 3 3 4 4
6 0 0 1 1 2 3 3 4 4 5 0 0 1 1 2 3 3 4 4 5
7 0 0 1 2 2 3 4 5 5 6 0 0 1 2 2 3 4 5 5 6
8 0 0 1 2 3 4 4 5 6 7 0 0 1 2 3 4 4 5 6 7
9 0 1 1 2 3 4 5 6 7 8 0 1 1 2 3 4 5 6 7 8
q 0 1 5 8 11 14 17 20 23 27 0 1 5 8 11 14 17 20 23 27
Продолжение
c 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
b 6 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7
r \ p 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1
3 0 0 0 0 1 1 1 2 2 2 0 0 0 0 1 1 1 2 2 2
4 0 0 0 1 1 2 2 2 3 3 0 0 0 1 1 2 2 2 3 3
5 0 0 1 1 2 2 3 3 4 4 0 0 1 1 2 2 3 3 4 4
6 0 0 1 1 2 3 3 4 4 5 0 0 1 1 2 3 3 4 4 5
7 0 0 1 2 2 3 4 5 5 6 0 0 1 2 2 3 4 5 5 6
8 0 0 1 2 3 4 4 5 6 7 0 1 1 2 3 4 5 5 6 7
9 0 1 2 2 3 4 5 6 7 8 0 1 2 2 3 4 5 6 7 8
q 0 1 6 8 11 14 17 20 23 27 0 2 6 8 11 14 18 20 23 27
Продолжение
c 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
b 8 8 8 8 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9
r \ p 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1
3 0 0 0 0 1 1 1 2 2 2 0 0 0 1 1 1 1 2 2 2
4 0 0 0 1 1 2 2 2 3 3 0 0 0 1 1 2 2 2 3 3
5 0 0 1 1 2 2 3 3 4 4 0 0 1 1 2 2 3 3 4 4
6 0 0 1 1 2 3 3 4 4 5 0 0 1 2 2 3 3 4 5 5
7 0 0 1 2 3 3 4 5 5 6 0 0 1 2 3 3 4 5 5 6
8 0 1 1 2 3 4 5 5 6 7 0 1 1 2 3 4 5 5 6 7
9 0 1 2 2 3 4 5 6 7 8 0 1 2 3 3 4 5 6 7 8
q 0 2 6 8 12 14 18 20 23 27 0 2 6 9 12 14 18 20 24 27
Продолжение
c 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
b 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 11 11 11
r \ p 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1
3 0 0 0 1 1 1 1 2 2 2 0 0 0 1 1 1 1 2 2 2
4 0 0 0 1 1 2 2 2 3 3 0 0 0 1 1 2 2 2 3 3
5 0 0 1 1 2 2 3 3 4 4 0 0 1 1 2 2 3 3 4 4
6 0 0 1 2 2 3 3 4 5 5 0 0 1 2 2 3 3 4 5 5
7 0 0 1 2 3 3 4 5 5 6 0 0 1 2 3 3 4 5 5 6
8 0 1 1 2 3 4 5 5 6 7 0 1 1 2 3 4 5 5 6 7
9 0 1 2 3 3 4 5 6 7 8 0 1 2 3 3 4 5 6 7 8
q 0 2 6 9 12 14 18 20 24 27 0 2 6 9 12 14 18 20 24 27
Продолжение
c 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
b 12 12 12 12 12 12 12 12 12 12 13 13 13 13 13 13 13 13 13 13
r \ p 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1
3 0 0 0 1 1 1 1 2 2 2 0 0 0 1 1 1 1 2 2 2
4 0 0 0 1 1 2 2 2 3 3 0 0 0 1 1 2 2 2 3 3
5 0 0 1 1 2 2 3 3 4 4 0 0 1 1 2 2 3 3 4 4
6 0 0 1 2 2 3 3 4 5 5 0 0 1 2 2 3 3 4 5 5
7 0 1 1 2 3 3 4 5 5 6 0 1 1 2 3 3 4 5 5 6
8 0 1 1 2 3 4 5 5 6 7 0 1 1 2 3 4 5 5 6 7
9 0 1 2 3 3 4 5 6 7 8 0 1 2 3 4 4 5 6 7 8
q 0 3 6 9 12 14 18 20 24 27 0 3 6 9 13 14 18 20 24 27
Продолжение
c 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
b 14 14 14 14 14 14 14 14 14 14 15 15 15 15 15 15 15 15 15 15
r \ p 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1
3 0 0 0 1 1 1 1 2 2 2 0 0 0 1 1 1 1 2 2 2
4 0 0 1 1 1 2 2 3 3 3 0 0 1 1 1 2 2 3 3 3
5 0 0 1 1 2 2 3 3 4 4 0 0 1 1 2 2 3 3 4 4
6 0 0 1 2 2 3 3 4 5 5 0 0 1 2 2 3 3 4 5 5
7 0 1 1 2 3 3 4 5 5 6 0 1 1 2 3 3 4 5 5 6
8 0 1 2 2 3 4 5 6 6 7 0 1 2 2 3 4 5 6 6 7
9 0 1 2 3 4 4 5 6 7 8 0 1 2 3 4 5 5 6 7 8
q 0 3 7 9 13 14 18 21 24 27 0 3 7 9 13 15 18 21 24 27
Продолжение
c 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179
b 16 16 16 16 16 16 16 16 16 16 17 17 17 17 17 17 17 17 17 17
r \ p 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1
3 0 0 0 1 1 1 1 2 2 2 0 0 0 1 1 1 1 2 2 2
4 0 0 1 1 1 2 2 3 3 3 0 0 1 1 1 2 2 3 3 3
5 0 0 1 1 2 2 3 3 4 4 0 0 1 1 2 2 3 3 4 4
6 0 0 1 2 2 3 3 4 5 5 0 0 1 2 2 3 3 4 5 5
7 0 1 1 2 3 3 4 5 6 6 0 1 1 2 3 3 4 5 6 6
8 0 1 2 2 3 4 5 6 6 7 0 1 2 2 3 4 5 6 6 7
9 0 1 2 3 4 5 5 6 7 8 0 1 2 3 4 5 5 6 7 8
q 0 3 7 9 13 15 18 21 25 27 0 3 7 9 13 15 18 21 25 27
Продолжение
c 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199
b 18 18 18 18 18 18 18 18 18 18 19 19 19 19 19 19 19 19 19 19
r \ p 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1
3 0 0 0 1 1 1 1 2 2 2 0 0 0 1 1 1 2 2 2 2
4 0 0 1 1 1 2 2 3 3 3 0 0 1 1 1 2 2 3 3 3
5 0 0 1 1 2 2 3 3 4 4 0 0 1 1 2 2 3 3 4 4
6 0 0 1 2 2 3 3 4 5 5 0 1 1 2 2 3 4 4 5 5
7 0 1 1 2 3 3 4 5 6 6 0 1 1 2 3 3 4 5 6 6
8 0 1 2 2 3 4 5 6 6 7 0 1 2 2 3 4 5 6 6 7
9 0 1 2 3 4 5 5 6 7 8 0 1 2 3 4 5 6 6 7 8
q 0 3 7 9 13 15 18 21 25 27 0 4 7 9 13 15 19 21 25 27
Продолжение
c 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219
b 20 20 20 20 20 20 20 20 20 20 21 21 21 21 21 21 21 21 21 21
r \ p 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1
3 0 0 0 1 1 1 2 2 2 2 0 0 0 1 1 1 2 2 2 2
4 0 0 1 1 1 2 2 3 3 3 0 0 1 1 1 2 2 3 3 3
5 0 0 1 1 2 2 3 3 4 4 0 0 1 1 2 2 3 3 4 4
6 0 1 1 2 2 3 4 4 5 5 0 1 1 2 2 3 4 4 5 5
7 0 1 1 2 3 4 4 5 6 6 0 1 1 2 3 4 4 5 6 6
8 0 1 2 2 3 4 5 6 6 7 0 1 2 3 3 4 5 6 7 7
9 0 1 2 3 4 5 6 6 7 8 0 1 2 3 4 5 6 6 7 8
q 0 4 7 9 13 16 19 21 25 27 0 4 7 10 13 16 19 21 26 27
Продолжение
c 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239
b 22 22 22 22 22 22 22 22 22 22 23 23 23 23 23 23 23 23 23 23
r \ p 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1
3 0 0 0 1 1 1 2 2 2 2 0 0 0 1 1 1 2 2 2 2
4 0 0 1 1 1 2 2 3 3 3 0 0 1 1 1 2 2 3 3 3
5 0 0 1 1 2 2 3 3 4 4 0 0 1 1 2 2 3 3 4 4
6 0 1 1 2 2 3 4 4 5 5 0 1 1 2 2 3 4 4 5 5
7 0 1 1 2 3 4 4 5 6 6 0 1 1 2 3 4 4 5 6 6
8 0 1 2 3 3 4 5 6 7 7 0 1 2 3 3 4 5 6 7 7
9 0 1 2 3 4 5 6 7 7 8 0 1 2 3 4 5 6 7 7 8
q 0 4 7 10 13 16 19 22 26 27 0 4 7 10 13 16 19 22 26 27
Продолжение
c 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259
b 24 24 24 24 24 24 24 24 24 24 25 25 25 25 25 25 25 25 25 25
r \ p 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1
3 0 0 0 1 1 1 2 2 2 2 0 0 0 1 1 1 2 2 2 2
4 0 0 1 1 1 2 2 3 3 3 0 0 1 1 1 2 2 3 3 3
5 0 0 1 1 2 2 3 3 4 4 0 0 1 1 2 2 3 3 4 4
6 0 1 1 2 2 3 4 4 5 5 0 1 1 2 2 3 4 4 5 5
7 0 1 1 2 3 4 4 5 6 6 0 1 2 2 3 4 4 5 6 6
8 0 1 2 3 3 4 5 6 7 7 0 1 2 3 3 4 5 6 7 7
9 0 1 2 3 4 5 6 7 7 8 0 1 2 3 4 5 6 7 7 8
q 0 4 7 10 13 16 19 22 26 27 0 4 8 10 13 16 19 22 26 27
Продолжение
c 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279
b 26 26 26 26 26 26 26 26 26 26 27 27 27 27 27 27 27 27 27 27
r \ p 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1
3 0 0 0 1 1 1 2 2 2 2 0 0 0 1 1 1 2 2 2 2
4 0 0 1 1 1 2 2 3 3 3 0 0 1 1 1 2 2 3 3 3
5 0 0 1 1 2 2 3 3 4 4 0 0 1 1 2 2 3 3 4 4
6 0 1 1 2 2 3 4 4 5 5 0 1 1 2 2 3 4 4 5 5
7 0 1 2 2 3 4 4 5 6 6 0 1 2 2 3 4 4 5 6 6
8 0 1 2 3 3 4 5 6 7 7 0 1 2 3 3 4 5 6 7 7
9 0 1 2 3 4 5 6 7 7 8 0 1 2 3 4 5 6 7 8 8
q 0 4 8 10 13 16 19 22 26 27 0 4 8 10 13 16 19 22 27 27


Обнаружено, что таблица разряда единиц (U) содержит не повторяющиеся столбцы, тогда как все столбцы таблицы разряда десятков (D) встречаются и в таблице U, и в таблице B.

Таким образом таблица U исчерпывает все порождённые столбцы. Следовательно, она и является полной таблицей Слонимского.

Для удобства дальнейшей работы, я пометил, с каким столбцом таблицы B совпадает каждый столбец таблицы D, и теми же номерами пометил столбцы того же номера таблицы U (строка q обеих таблиц), а для ещё большего удобства ввёл массив Q, содержащий указанные значения, под номерами, соответствующими номерам столбцов в таблицах D и U.
Q
Q = [0, 0, 5, 8, 11, 14, 17, 19, 23, 27, 0, 1, 5, 8, 11, 14, 17, 19, 23, 27, 0, 1, 5, 8, 11, 14, 17, 19, 23, 27, 0, 1, 5, 8, 11, 14, 17, 20, 23, 27, 0, 1, 5, 8, 11, 14, 17, 20, 23, 27, 0, 1, 5, 8, 11, 14, 17, 20, 23, 27, 0, 1, 6, 8, 11, 14, 17, 20, 23, 27, 0, 2, 6, 8, 11, 14, 18, 20, 23, 27, 0, 2, 6, 8, 12, 14, 18, 20, 23, 27, 0, 2, 6, 9, 12, 14, 18, 20, 24, 27, 0, 2, 6, 9, 12, 14, 18, 20, 24, 27, 0, 2, 6, 9, 12, 14, 18, 20, 24, 27, 0, 3, 6, 9, 12, 14, 18, 20, 24, 27, 0, 3, 6, 9, 13, 14, 18, 20, 24, 27, 0, 3, 7, 9, 13, 14, 18, 21, 24, 27, 0, 3, 7, 9, 13, 15, 18, 21, 24, 27, 0, 3, 7, 9, 13, 15, 18, 21, 25, 27, 0, 3, 7, 9, 13, 15, 18, 21, 25, 27, 0, 3, 7, 9, 13, 15, 18, 21, 25, 27, 0, 4, 7, 9, 13, 15, 19, 21, 25, 27, 0, 4, 7, 9, 13, 16, 19, 21, 25, 27, 0, 4, 7, 10, 13, 16, 19, 21, 26, 27, 0, 4, 7, 10, 13, 16, 19, 22, 26, 27, 0, 4, 7, 10, 13, 16, 19, 22, 26, 27, 0, 4, 7, 10, 13, 16, 19, 22, 26, 27, 0, 4, 8, 10, 13, 16, 19, 22, 26, 27, 0, 4, 8, 10, 13, 16, 19, 22, 26, 27, 0, 4, 8, 10, 13, 16, 19, 22, 27, 27];


Вскрытие алгоритма



Сперва я обратил внимание на то, что группа столбцов с b=0 таблицы DU — совпадает с таблицей Пифагора.
c 0 1 2 3 4 5 6 7 8 9
b 0 0 0 0 0 0 0 0 0 0
r \ p 0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 0 0
1 0 1 2 3 4 5 6 7 8 9
2 0 2 4 6 8 10 12 14 16 18
3 0 3 6 9 12 15 18 21 24 27
4 0 4 8 12 16 20 24 28 32 36
5 0 5 10 15 20 25 30 35 40 45
6 0 6 12 18 24 30 36 42 48 54
7 0 7 14 21 28 35 42 49 56 63
8 0 8 16 24 32 40 48 56 64 72
9 0 9 18 27 36 45 54 63 72 81

Второе наблюдение: если выбрать из таблицы U столбцы с p=0, составленная из них таблица совпадает с таблицей B.
c 0 10 20 30 40 50 60 70 80 90 100 110 120 130
b 0 1 2 3 4 5 6 7 8 9 10 11 12 13
r \ p 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 0 0 0 0 0 0 0 0 0
3 0 0 0 0 0 0 0 0 0 1 1 1 1 1
4 0 0 0 0 0 0 0 1 1 1 1 1 1 1
5 0 0 0 0 0 1 1 1 1 1 1 2 2 2
6 0 0 0 0 1 1 1 1 1 2 2 2 2 2
7 0 0 0 1 1 1 1 1 2 2 2 2 3 3
8 0 0 1 1 1 1 1 2 2 2 3 3 3 3
9 0 1 1 1 1 1 2 2 2 3 3 3 3 4
q 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Продолжение
c 140 150 160 170 180 190 200 210 220 230 240 250 260 270
b 14 15 16 17 18 19 20 21 22 23 24 25 26 27
r \ p 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2 1 1 1 1 1 1 1 1 1 1 1 1 1 1
3 1 1 1 1 1 2 2 2 2 2 2 2 2 2
4 2 2 2 2 2 2 2 3 3 3 3 3 3 3
5 2 2 2 3 3 3 3 3 3 4 4 4 4 4
6 3 3 3 3 3 4 4 4 4 4 5 5 5 5
7 3 3 4 4 4 4 5 5 5 5 5 6 6 6
8 4 4 4 4 5 5 5 6 6 6 6 6 7 7
9 4 5 5 5 5 6 6 6 7 7 7 7 7 8
q 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Значит каждый столбец D[i] таблицы D входит в таблицу U как столбец у которого b=Q[i], p=0.

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

Тогда я предположил, что q — это номер группы, из которой я должен взять столбец для следующего разряда. Начинать решил с группы 0.
Провёл вычислительный эксперимент с помощью FireBug — вроде как получается.

Возьмём для примера случайное четырёхразрядное (чтобы эксперимент был не слишком простым) число. При подготовке статьи, я сделал это так:
value = (100 + Math.floor(Math.random()*(999-100)))*10 + 1 + Math.floor(Math.random()*(9-1));

Такая формула гарантирует, что будет получено число не меньше 1000 и что в разряде единиц не будет нуля.
При крайней сборке статьи, рандом выдал мне value = 3212.
Возьмём из группы 0 таблицы U столбец 2:
c 2
b 0
r \ p 2
0 0
1 2
2 4
3 6
4 8
5 0
6 2
7 4
8 6
9 8
q 5

Видим, что для него q = 5. Теперь для следующего разряда возьмём из группы 5 столбец 1:
c 51 2
b 5 0
r \ p 1 2
0 0 0
1 1 2
2 2 4
3 3 6
4 4 8
5 6 0
6 7 2
7 8 4
8 9 6
9 0 8
q 1 5

Для этого столбца q = 1. Продолжим таблицу аналогичным образом, и получим:
c 53 12 51 2
b 5 1 5 0
r \ p 3 2 1 2
0 0 0 0 0
1 3 2 1 2
2 6 4 2 4
3 9 6 3 6
4 2 8 4 8
5 6 0 6 0
6 9 2 7 2
7 2 4 8 4
8 5 6 9 6
9 8 9 0 8
q 8 5 1 5

Цифры у нас кончились, очередное q = 8. Очевидно, нужно из группы 8 взять нулевой столбец. Получаем:
c 80 53 12 51 2
b 8 5 1 5 0
r \ p 0 3 2 1 2
0 0 0 0 0 0
1 0 3 2 1 2
2 0 6 4 2 4
3 0 9 6 3 6
4 1 2 8 4 8
5 1 6 0 6 0
6 1 9 2 7 2
7 2 2 4 8 4
8 2 5 6 9 6
9 2 8 9 0 8
q 0 8 5 1 5

Легко видеть, что в строках этой таблицы находятся произведения нашего числа 3212 на 0, 1, 2,… 9.

Разбор эксперимента

Труднее было разобраться, почему это работает.
Итак, у нас есть 28 групп (от 0 по 27) по 10 столбцов. Группам присвоены те же номера, что и столбцам таблицы B.
В таблицах DU, U и D в строке b содержится номер группы, в строке p — номер столбца в группе.

Введём функции:
Функция умножения числа на вектор {0; 1; 2; 3; 4; 5; 6; 7; 8; 9} (вектор представлен массивом)
function mul(n){
  var result = new Array(10);
  for(var i=0; i<10; ++i){
    result[i]=n*i;
  }
  return result;
}

Функция векторного сложения двух массивов
function sum(a, b){
  var result = new Array(10);
  for(var i=0; i<10; ++i){
    result[i]=a[i]+b[i];
  }
  return result;
}

Функция получения массива, содержащего значения разряда единиц значений исходного массива
function unit(a){
  var result = new Array(10);
  for(var i=0; i<10; ++i){
    result[i]=a[i] % 10;
  }
  return result;
}

Функция получения массива, содержащего значения разряда десятков значений исходного массива
function deca(a){
  var result = new Array(10);
  for(var i=0; i<10; ++i){
    result[i]=Math.floor(a[i] / 10);
  }
  return result;
}

Нетрудно сравнить формулы и заметить, что каждый столбец таблицы P, это ни что иное, результат функции mul для номера столбца;
столбцы таблиц D и U получены из столбцов таблицы DU с помощью функций unit и deca соответственно;
каждый столбец таблицы DU получен суммированием одного столбца таблицы B и одного столбца таблицы P, что соответствует использованию функции sum.

Вспомним алгоритм умножения в столбик многоразрядного числа на одноразрядное:
Пусть
anan-1...a1a0 — множимое, записанное поразрядно;
b — одноразрядный множитель;
сn+1cn...c1c0 — результат, записанный поразрядно(полагаем, что результат на один разряд длиннее множимого, в большинстве случаев так и будет, в остальных — от ведущего нуля ещё никто не умирал);
m0, m1,… mn — значения, переносимые в старший разряд (при вычислении на бумаге записываются «наверх»);
floor — функция округления вниз;
% — операция получения остатка от деления.
Переменная x будет использоваться как локальная и перевычисляться для каждого разряда.

1. Берём из таблицы умножения (она у каждого из нас в памяти) произведение нулевого разряда множимого на множитель:
x = a0*b;
разряд единиц числа x без изменений записываем в результат: c0 = x % 10;
разряд десятков числа х записываем «наверх»: m0 = floor(x/10).

2. Берём из таблицы умножения произведение первого разряда множимого на множитель и прибавляем к нему значение «сверху»:
x = a1*b + m0
разряд единиц — записываем в результат: c1 = x % 10;
разряд десятков — записываем «наверх»: m1 = floor(x/10).

3. Аналогично поступаем для разрядов со 2 по n:
x = ai*b + mi-1
ci = x % 10;
mi = floor(x/10).

4. Полученное при вычислении разряда n значение mn даст нам последний разряд результата:
cn+1 = mn.


Полагаю, все согласны? В описании ошибок нет? Тогда размышляем дальше:

Таблица Слонимского служит для получения произведений произвольного числа на ряд чисел от 0 до 9.
Если бы мы решили умножать в столбик, то умножали бы множимое число десять раз и получили по набору сn+1cn...c1c0 и m0, m1,… mn для каждого из десяти множителей.
Поскольку мы хотим вскрыть алгоритм Слонимского, введём ещё массив j0… jn+1, в котором будем хранить номера столбцов таблицы U, соответствующих столбцам результата умножения.

Для упрощения формы записи, воспользуемся введёнными нами функциями, и пройдёмся по тем же пунктам вышеупомянутого алгоритма:
1. Вычислим
x = mul(a0);
Очевидно, что x совпадает со столбцом № a0 таблицы Пифагора (P) и, что интересно, со столбцом p=a0, b=0 таблицы DU. В таблицах DU, U и D номер столбца вычисляется как b*10+p, следовательно
x = DU[a0]
Теперь нам нужны единицы, чтобы записать в результат, и десятки, чтобы записать «наверх»:
c0 = unit(x);
m0 = deca(x);
в данном случае c0 и m0 — массивы.
Обратим внимание, что c0 получен точно так же, как столбец p=a0, b=0 таблицы U, а m0 — как соответствующий столбец таблицы D.
Запишем:
j0 = a0;
c0 = U[j0];
m0 = D[j0].

2. Возьмёмся теперь за следующий разряд. Нам нужно вычислить произведения a1 на вектор, а затем векторно прибавить к полученному массиву массив m0:
x = sum(mul(a1), m0);
Разбираем эту формулу:
mul(a1) совпадает со столбцом P[a1].

В шаге 1 было вычислено:
m0 = D[j0].
Вспомним теперь, что для каждого столбца таблицы D найден номер q, под которым этот столбец входит в таблицу B. Этот номер мы для удобства записали в строку q таблиц U и D и в массив Q.
Теперь запишем:
m0 = D[j0] = B[Q[j0]];
Да простят мне программисты и математики такое смешение стилей.

Оба слагаемых разобраны. Теперь вспомним о сумме. Одно из слагаемых является членом таблицы P, а другое — таблицы B. Все суммы на этот случай у нас посчитаны и входят в таблицу DU.
Следовательно, искомый массив должен совпадать со столбцом таблицы DU, для которого p=a1, b=Q[j0]:
x = DU[Q[j0]*10 + a1].
Теперь нам снова нужны единицы и десятки от членов x:
c1 = unit(x);
m1 = deca(x);
и нам в этом снова помогут таблицы U и D.

Подведём итог второго шага:
j1 = Q[j0]*10 + a1;
c1 = U[j1];
m1 = D[j1].

3. Уже можно подметить закономерность:
x = sum(mul(ai), mi-1);
а так как:
mul(ai) = P[ai],
mi-1 = D[ji-1] = B[Q[ji-1]];
то:
x = DU[Q[ji-1]*10 + ai].
Следовательно:
ji = Q[ji-1]*10 + ai;
ci = U[ji];
mi = D[ji].

4. Теперь посмотрим, что нам делать с mn.
Последний перенос разряда это старший разряд результата. Но нам надо выбрать столбец таблицы U.
Проанализируем:
mn = D[jn].
D[jn] входит в таблицу U как столбец b=Q[jn], p=0, т.е.
D[jn] = U[Q[jn]*10].
Следовательно:
jn+1 = Q[jn]*10;
cn+1 = U[jn+1].
Поскольку никакое произведение одноразрядных чисел не может дать более чем двухразрядное число, массив mn+1 будет содержать только нули. Вычисление закончено.

Теперь соберём в кучу найденные уравнения для ji:
j0 = a0;
ji = Q[ji-1]*10 + ai;
jn+1 = Q[jn]*10.
Они сводятся к одному уравнению
ji = Q[ji-1]*10 + ai,
если принять, что
an+1 = 0 (что равносильно приписыванию ведущего нуля к множимому числу),
Q[j-1] = 0.

Это означает, что чтобы сложить из столбцов таблицы U таблицу произведений числа anan-1...a1a0 на одноразрядные числа, нужно каждый раз из группы b=Q[ji-1] брать столбец p=ai, причём строка q того же столбца таблицы подскажет нам, какая группа столбцов будет следующей, а начать работу нужно с группы столбцов 0.

Продемонстрированный в эксперименте алгоритм выведен аналитически.

Резюмирую:

Найденный алгоритм можно описать как автоматный, где входной строкой является умножаемое число, читаемое справа налево (от младших разрядов к старшим), а состояниями являются номера групп столбцов. На каждом этапе работы мы берём из группы под номером состояния столбец под номером очередной цифры и переходим в состояние под номером из строки q этого столбца.
Для корректного завершения работы алгоритма, к множимому числу нужно дописать ведущий ноль.

Материальная реализация

Этот раздел не имеет особого значения для статьи, я мог бы его не включать. Но для галочки пусть будет.

Ни «снаряд» Слонимского, ни бруски Иоффе не были мной восстановлены. Для воссоздания аутентичных копий нужно больше информации о самих изделиях.

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

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

Должен заметить, что удобно разместить столбцы на четырёхгранных брусках, как у Иоффе, мне не удалось. Подозреваю, что бруски Иоффе были не такими уж удобными.

28 групп по 10 столбцов удобно размещать на двухсторонних рейках. При этом каждая группа столбцов наносилась на собственные пять реек.

Для уменьшения объёма наносимой на рейки информации, на рейки не наносилась нулевая строка таблицы, т.к. она содержит во всех столбцах цифру 0. Номер столбца отдельно не наносился, т.к. он совпадает с цифрой в первой строке таблицы. Номер группы, к которой принадлежит рейка, был нанесён римскими цифрами на боковые грани рейки. Он нужен только для сортировки реек в случае их случайного перемешивания (чего в ходе эксплуатации нужно избегать).

Значение q столбца нанесено на каждой рейке ниже разделительной горизонтальной линии.

Рейки изготовлены из алюминиевой полосы 50х2 мм, которая для этого была напилена электролобзиком примерно по 4-6 мм (слишком узкие браковались, слишком широкие либо подтачивались точильным диском, либо также браковались).
Цифры нанесены гравировальной фрезой.
Для хранения реек был высверлен из соснового бруса 50х40 мм деревянный органайзер. Да, знаю, что можно продумать лучше, но до игры оставалось 2 дня, а силы после гравировки 2800 циферок были на исходе.
Номера групп и столбцов нанесены на органайзер гелевой ручкой.

Из-за загадочных глюков с исчезновением картинок, фотографии добавлены с помощью комментария habrahabr.ru/post/232255/#comment_7940351

Источники


1. Вестник Сыктывкарского университета. Сер.1. Вып.13.2011. УДК 512.6, 517.987 «К 200-летию со дня рождения создателей вычислительных машин, представленных к демидовской премии, Х.З. Слонимского и Г. Куммера». В.П. Одинец;
2. Теорема Слонимского и простые вычислительные устройства на ее основе.

P.S. Да благословит Дух Машины ваш сервер, ибо он пережил отправку почти 200кб кода, а с учётом эскапирования — все 500.
AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 5

    +8
    Это что, пост о том как не надо писать посты? Можно было бы в кратце описать что это за таблицы Слонимского и для чего они нужны. Почему я должен лезть в википедию за этим. Что это за приложение 1 и приложение 2? Что вас остановило тут же в тексте вставить эти таблицы? Зачем заставляете читателя мотать туда-сюда. Зачем эти ненужные телодвижения?
    Очевидно, что столбец единиц полученных произведений совпадает со столбцом единиц произведений последней цифры исходного числа на тот же ряд чисел.
    Простите, но нифига не очевидно. Я ничего не понял из предыдущего абзаца. Вставьте пару картинок, какие куда столбцы нужно переносить.
    Что это за органайзер с рейками, как это все должно работать? Где крутить куда нажать чтобы получить результат. Вы может и вскрыли алгоритм только теперь еще читателю приходится вскрывать ваш пост для того чтобы понять о чем он вообще…
      +5
      И не подумайте, что придераюсь, но фотки можно было бы сделать и получше. На 2-й фотке «римскую запись VII» (вы имели ввиду цифру) можно разглядеть имея изрядную долю фантазии.
        0
        Спасибо за критику. Статью переработаю.
        0
        Пост надо доделать и представить вновь. Это можно и нужно написать нормально. Пока минус
          0
          Рис.1. Вид отдельной рейки инструмента. Рейка содержит столбцы U[0] и U[1], на фотографии обращена вверх столбцом U[1], ниже горизонтальной линии — номер следующей группы реек.


          Рис.2. Ребро рейки, из группы 7, видно римскую запись VII


          Рис.3. Общий вид набора реек в деревянном органайзере.


          Рис.4. Правый край органайзера, видны цифры множимого числа, соответствующие нанесённым на рейки столбцам.



          Рис.5. Часть передней стороны органайзера. Видны номера групп реек.


            0
            Оставлю это здесь, чтобы не потерять
            image

            Only users with full accounts can post comments. Log in, please.