Ясно, что и при другом основании системы счисления можно использовать простейшую проверку. Для числа
M = mnbn + mn-1bn-1 +… + m2b2 + m1b + m0,
записанного при основании b, как и в (8.1.5), мы имеем
1 ≡ 1, b ≡ 1, b2 ≡ 1… (mod (b — 1));
поэтому, как и раньше,
М ≡ SM = mn + mn-1 +… + m2 + m1 + m0 (mod (b — 1)),
и проверочное правило остается прежним.
Это, по-видимому, совершенно тривиальное замечание применимо даже в нашей обычной десятичной системе. Мы упоминали в § 5 главы 7, что если мы разобьем цифры десятичного числа на группы по три, то тогда эта группировка может рассматриваться как представление числа при основании b = 103 = 1000. Аналогично, если группировать цифры в пары, то это соответствует представлению числа при основании b = 102 = 100.
Рис. 20.
Взяв числа 3119 и 3724 вновь в качестве примера и записав
M = 31 19, N = 37 24, MN = 11 61 51 56,
мы находим
M ≡ 31 + 19 = 50 (mod 99), N ≡ 37 + 24 = 61 (mod 99),
MN ≡ 11 +61+ 51+56 = 179 ≡ 80 (mod 99).
Здесь наша проверка «скрещенных костей» будет такой, как на рис. 20, потому что, как легко видеть, 50 • 61 ≡ 80 (mod 99).
Эта проверка более эффективна, чем «выкидывание девяток», потому что модули в этом случае гораздо больше и вероятность, что ответ будет правильным, соответственно гораздо больше. Другими словами, «ошибка по модулю 99» менее вероятна, чем «ошибка по модулю 9».
Многие задачи астрономии и хронологии, связанные с периодичностью, могут быть сформулированы в терминах теоретико-числовых понятий. Возьмем простой пример: определение дня недели, который падает на заданный день. Дни недели повторяются с периодом 7, поэтому вместо обычных названий мы можем дать каждому дню номер:
воскресенье = 0,
понедельник = 1,
вторник = 2,
среда = 3,
четверг = 4,
пятница = 5,
суббота = 6.
Если мы это сделаем, то каждому целому числу соответствует день недели, а именно: день, определяемый его остатком по модулю 7.
Если бы мы имели благоприятнейшую ситуацию, при которой количество дней в году делилось на 7, то все даты падали бы на одни и те же дни ежегодно, и составление расписаний было бы гораздо проще, а издатели календарей имели бы меньше работы. Однако количество дней в году равно
365 ≡ 1 (mod 7),
за исключением високосных лет, в которых количество дней
366 ≡ 2 (mod 7).
Это показывает, что для обычного года номер W дня недели заданной даты в следующем году увеличится на 1, например, если в этом году 1 января — воскресенье, то в следующем году он будет падать на понедельник. Это не слишком сложно, однако, эта простая схема нарушается високосными годами. Это происходит каждый четвертый год, тогда номер дня недели увеличивается на 2. Более того, возникает дополнительная трудность из-за того, что добавочный день високосного года прибавляется не в начале или конце года, а 29 февраля. Поэтому, для удобства, в общей формуле для вычисления W, которую мы дадим ниже, договоримся считать март — первым месяцем, апрель — вторым и т. д., при этом январь будет одиннадцатым месяцем, а февраль — двенадцатым месяцем предшествующего года.
Но на этом наши трудности не кончаются. В юлианском календаре, введенном по указу Юлия Цезаря, было принято, что год точно равен 365 1/4 дня, в соответствии с правилом високосного года. Однако это не совсем правильно, так как астрономический год в действительности равен 365,2422 дня.
Эта маленькая ошибка вызвала постепенный сдвиг сезонов по отношению к календарю, например, в шестнадцатом веке день весеннего равноденствия (первый день весны) пал на 11 марта вместо 21 марта, как это должно было быть.
Чтобы исправить положение, в 1582 году папа Григорий XIII после долгих колебаний произвел реформу календаря в странах с католическим вероисповеданием. В том году было опущено 10 дней, а именно, пятницу 5 октября стали считать пятницей 15 октября. Более того, для корректирования календаря были введены следующие григорианские правила для високосных лет.
Годы столетий
1700, 1800, 1900, 2100, 2200, 2300…,
в которых количество столетий не делится на 4, не считаются високосными годами. Оставшиеся годы столетий
1600, 2000, 2400…
продолжают считаться високосными годами. Получается очень хорошее приближение к правильной длине года, однако капельку длиннее. Было предложено не считать годы 4000, 8000… високосными вопреки григорианскому правилу; но так как этот вопрос еще открыт и не имеет отношения к ближайшему будущему, то мы не будем это принимать в нашей формуле.
Предположим теперь, что нам задана дата: d-й день в m-м месяце (где m определяется так, как было указано выше), в году, равном
N = c • 100 + Y, (8.2.1)
где с—количество столетий, а Y — номер года в столетии. Тогда можно доказать, что наш номер дня недели определяется при помощи сравнения
W ≡ d + [1/5 (13m -1)] + Y + [1/4 Y] + [1/4 c] — 2с (mod 7). (8.2.2)
Квадратные скобки, фигурирующие в этой формуле, были введены в § 3 главы 4 для обозначения наибольшего целого числа, не превосходящего числа, стоящего внутри этих скобок.
Пример. День Пирл-Харбора[12], 7 декабря 1941 г. Здесь
d = 7, m = 10, с = 19, Y = 41,
так что
W = 7 + 25 + 41 + 10 + 4 — 38 ≡ 0 (mod 7).
т. е. это было в воскресенье.
Пример. Каким днем недели будет 1 января 2000 года? Здесь
d = 1, m = 11, с = 19, Y = 99
и
W = 1 + 28 + 1 + 3 + 4 — 38 ≡ 6 (mod 7);
таким образом, первый день следующего столетия[13] будет субботой.
При пользовании этой формулой следует помнить, что ее нельзя применять для того периода, когда еще не был введен григорианский календарь. В Англии и английских колониях он был введен в 1752 году, при этом из календаря было опущено одиннадцать дней: 3 сентября стали считать 14 сентября по новому стилю[14].
Оставшаяся часть этого параграфа предназначена для тех, кто хотел бы познакомиться с выводом формулы (8.2.2). Вывод формулы проведем в два этапа. Во-первых, определим номер дня недели для 1 марта произвольного N-го года в формуле (8.2.1). Начнем отсчет от некоторого года, скажем, от 1600-го, и обозначим номер дня недели для 1 марта этого года через d1600. Можно было бы узнать номер этого дня из архивных документов, но можно обойтись и без этого, а получить его, как результат рассуждений.
Если бы не было високосных лет, то мы могли бы найти dN — номер дня недели 1 марта N-то года, просто добавляя по одному дню к d1600 для каждого из прошедших лет. Это дает число
d1600 + (100с + Y — 1600) (mod 7). (8.2.3)
Принимая во внимание високосные годы и предполагая, что они следуют регулярно каждый четвертый год, мы должны прибавить к первому выражению еще следующее:
[1/4 (100с + Y — 1600)] = 25с — 400 + [1/4 Y]. (8.2.4)
Однако это чуть больше, чем нужно, потому что год окончания каждого столетия обычно не бывает високосным, и ввиду этого мы должны вычесть число
с—16. (8.2.5)
Но мы должны еще учесть следующее исключение: если с — номер столетия, делится на четыре, то год 100 с считается високосным. Таким образом, нужно добавить последнюю поправку
[1/4 (с -16)] = [1/4 с] — 4. (8.2.6)
Теперь мы сложим выражение (8.2.3) и (8.2.4), вычтем (8.2.5) и прибавим (8.2.6). Это даст нам номер дня недели 1 марта N-гo года в виде выражения
dN ≡ d1600 + 124с + Y — 1988 + [1/4 с] + [1/4 Y] (mod 7).
Чтобы упростить его, мы приводим числа по модулю 7 и таким образом получаем
dN ≡ d1600 — 2с + Y + [1/4 с] + [1/4 Y] (mod 7). (8.2.7)
Применим эту формулу к 1968 году, в котором 1 марта падает на пятницу, следовательно, d1968 = 5.
Здесь с = 19, [1/4 c] = 4, Y = 68, [1/4 Y] = 17,