Реферат: Арифметика на службе защиты
Шаг
42. 42x42 = 1746 1746x2916 = 5091336 5091336+805895 = 5949719
...
"Лишняя" пятерка сразу показывает, что не с всеми шагами все "чисто". А именно - например, на последнем шаге складывается произведение 1746x2916 не с результатом предидущего сложения (4805895), а с его частью (805895). Теперь выясняется примерный алгоритм:
SUM=1
LOOP I=1 TO 42
SUM+= I^2 x S[i]
IF I = STEP_LEVEL THEN ... ; Откусить старшие разряды
END LOOP
; Где S[i] - добавка на каждом I-м шаге
Вот зачем нужен был код форматирования нецелых чисел! Программист не нашел ничего лучшего, чем переформатировать real-число в строку и контекстным поиском выяснять, не нужно ли отбросить старшие разряды! :)
Остается выяснить, что такое эти S[i]. Вот их список:
Шаг S[i]
1. 2401
2. 2500
3. 2601
4. 2704
...
Что же это за числа? Мы возводим индекс в квадрат, нет ли и тут чего-то похожего? Действительно:
Шаг S[i]
1. 2401 = 49^2
2. 2500 = 50^2
3. 2601 = 51^2
4. 2704 = 52^2
...
Ага, понятно, что это за числа! Да это же байты ИНН: "12345...". А что дальше? ИНН длиной 10 символов, первые 10 шагов понятны. Но далее S[i] становятся загадочными:
Шаг S[i]
11. 16641 = 129^2
12. 25600 = 160^2