Сформулируйте задачу по теории чисел: какие критерии делимости позволяют быстрее всего установить, делится ли большое число, заданное в десятичной форме, на 9, 11 и 7, и объясните ограничения каждого критерия

10 Дек в 08:22
11 +11
0
Ответы
1
Задача: для большого десятичного числа NNN установить, делится ли NNN на 999, 111111 и 777. Приведите самые быстрые практические критерии и ограничьте их применимость.
Критерий для 999 - Утверждение: NNN делится на 999 тогда и только тогда, когда сумма его цифр делится на 999.
- Обоснование: 10≡1(mod9)10\equiv 1\pmod{9}101(mod9), поэтому для записи N=∑di10iN=\sum d_i10^iN=di 10i имеем N≡∑di(mod9)N\equiv\sum d_i\pmod{9}Ndi (mod9).
- Практический способ: вычислить S=∑diS=\sum d_iS=di (или итеративно сводить сумму цифр), проверить S≡0(mod9)S\equiv 0\pmod{9}S0(mod9).
- Ограничения: требует чтения всех цифр (O(n)O(n)O(n) по числу цифр); удобен для человека (простая суммa), даёт ровно остаток по 999 (а также по 333). Не сокращает асимптотику — нужен полный просмотр числа.
Критерий для 111111 - Утверждение: NNN делится на 111111 тогда и только тогда, когда чередующаяся сумма цифр делится на 111111: N≡∑(−1)idi(mod11)N\equiv\sum (-1)^i d_i\pmod{11}N(1)idi (mod11).
- Обоснование: 10≡−1(mod11)10\equiv -1\pmod{11}101(mod11), значит 10i≡(−1)i10^i\equiv(-1)^i10i(1)i.
- Практический способ: вычислить A=∑i(−1)idiA=\sum_{i}(-1)^i d_iA=i (1)idi (или поразрядно: прибавлять и вычитать поочерёдно), проверить A≡0(mod11)A\equiv 0\pmod{11}A0(mod11).
- Ограничения: также O(n)O(n)O(n); 조금 сложнее для человека (нужна чередующаяся сумма), но даёт остаток по 111111. Для длинных чисел удобно реализовать как r=(10r+d) mod 11r=(10r+d)\bmod 11r=(10r+d)mod11.
Критерии для 777 - Общая заметка: для 777 нет столь тривиальной «суммы цифр», но есть несколько практичных приёмов.
1. Правило «удалить последнюю цифру, вычесть удвоенную последнюю цифру»: для N=10a+bN=10a+bN=10a+b (где bbb — последняя цифра) число NNN делится на 777 тогда и только тогда, когда a−2ba-2ba2b делится на 777.
- Короткое обоснование: 10a+b≡3a+b(mod7)10a+b\equiv 3a+b\pmod{7}10a+b3a+b(mod7) и 3(a−2b)=3a−6b≡3a+b(mod7)3(a-2b)=3a-6b\equiv 3a+b\pmod{7}3(a2b)=3a6b3a+b(mod7); так как 333 обратим по модулю 777, получаем эквивалентность делимости.
- Практика: повторять операцию, пока не получится небольшое число.
- Ограничения: операция даёт меньший по величине результат не всегда очень быстро, возможны промежуточные отрицательные числа (но с ними удобно работать), для руки надо повторять несколько раз — не самая компактная для человека при очень длинных числах.
2. Правило блоками по 333 цифры (быстро для больших десятичных записей): поскольку 103=1000≡−1(mod7)10^3=1000\equiv -1\pmod{7}103=10001(mod7), представим N=∑Bi103iN=\sum B_i 10^{3i}N=Bi 103i (каждый BiB_iBi — блок от 000 до 999999999). Тогда
N≡∑(−1)iBi(mod7).N\equiv\sum (-1)^i B_i\pmod{7}.N(1)iBi (mod7). - Практика: складывать/вычитать подряд блоки по 333 цифры; результат проверить на делимость на 777.
- Ограничения: уменьшает число операций примерно в 333 раза по сравнению с покомпонентной обработкой цифр, но приходится работать с трёхзначными блоками.
3. Универсальный (и для компьютера оптимальный) метод: остаток по модулю mmm вычисляют поразрядно
r:=0;для каждой цифры d: r←(10r+d) mod m.r:=0;\quad\text{для каждой цифры }d:\ r\leftarrow (10r+d)\bmod m.r:=0;для каждой цифры d: r(10r+d)modm. Для m=7m=7m=7 это даёт за одну проходку корректный остаток.
- Ограничения: сложность O(n)O(n)O(n); это оптимально по времени (нельзя решить, не прочитав число).
Сравнение по быстроте и применимости
- Для человека: самый быстрый — критерий для 999 (сумма цифр), затем 111111 (чередующаяся сумма), для 777 удобнее блоки по 333 цифры или правило «удвоить последнюю и вычесть».
- Для машины: универсальный поразрядный модульный алгоритм r=(10r+d) mod mr=(10r+d)\bmod mr=(10r+d)modm оптимален и одинаково прост для m∈{7,9,11}m\in\{7,9,11\}m{7,9,11}.
- Общий ограничитель: ни один критерий не позволяет избежать чтения всех цифр числа — любой корректный тест требует времени не меньше O(n)O(n)O(n) по числу цифр (информация о числе должна быть прочитана).
(Кратко: для 999 — сумма цифр; для 111111 — чередующаяся сумма; для 777 — правило «a-2b» или блоки по 333 цифры; для всех трёх оптимально по компьютеру — поразрядное вычисление остатка r=(10r+d) mod mr=(10r+d)\bmod mr=(10r+d)modm.)
10 Дек в 08:34
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир