Помощь - Поиск - Пользователи - Календарь
Полная версия: Поясните пожалуйста.
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Harsent
Задачка такая:
Код
Выяснить, делится ли на 7 двоичное число, состоящее не более чем из 1000 цифр.


Т.е нужно перебрать все цифры от 1000 до 9999 и узнать, какие из них деляться на 7?
Ozzя
Нет.
Двоичное число - это число вида 010101010101111.
Количество цифр в этом числе не более 1000.
Нужно узнать делится ли такое число на 7.

Признак делимости на 7 знаете?

Цитата
Число делится на 7 тогда и только тогда, когда результат вычитания удвоенной последней цифры из этого числа без последней цифры делится на 7 (т. н. 364 делится на 7 т. к. 36-2×4 = 28 делится на 7) (без остатка).

Н. Н. Воробьёв, Признаки делимости, «Популярные лекции по математике», Выпуск 38, М., «Наука» 1988 г., 94 стр.


Причем это свойство для десятичных чисел. Вам разрешено переводить исходное двоичное число в десятичное?
Harsent
Цитата(Ozzя @ 14.03.2006 10:33) *

Причем это свойство для десятичных чисел. Вам разрешено переводить исходное двоичное число в десятичное?

В условии этого не сказано, но других путей, кроме как, перевода в десятичное, я, например, не представляю smile.gif значит, разрешено всё то, что не запрещено smile.gif
Harsent
Help! blink.gif
мисс_граффити
а нет ли какого-нибудь специфического признакак для восьмеричной сс?
мне кажется, что-то аналогично 9 в 10 сс.
Malice
Переводить 2-ное число в 10-е не надо. Учитывая, что в условии говорится про 100 цифр smile.gif Нужно разбить на тройки и сложить. Если полученное число делится на 7, то все ок. Разрядность полученного числа будет значительно меньше исходного, поэтому вторую проверку делать можно и через Mod (ну или дальше разбивать и складывать)

пример:

7*33=231=11 100 111, складываем: 3+4+7=14.
14=1 110=1+6=7.

31969=111 110 011 100 001=7+6+3+4+1=21
мисс_граффити
Malice, я про это, собственно, и пыталась сказать smile.gif
разбиением на триады фактически переходим к восьмеричной.
Lapp
Цитата(мисс_граффити @ 15.03.2006 11:16) *

Malice, я про это, собственно, и пыталась сказать smile.gif

Конечно, но Malice привел конкретный признак! smile.gif
Я тут приведу его обоснование, а то не совсем понятно, откуда он берется..
Пусть ai - цифры (из набора от 0 до 7), представляющие восьмеричную запись числа, пронумерованные справа налево от i=0 до n. Тогда само число есть:
an*8^n + ... + ai*8^i + ... + a0
Теперь представим 8 как 7+1
an*(7+1)^n + ... + ai*(7+1)^i + ... + a0
Если теперь раскрыть каждую скобку по формуле бинома Ньютона, то в ней все слагаемые будут иметь множитель 7, кроме одного, который равен 1. Отбросим все слагаемые с семерками (они делятся на 7). Теперь видно, что для делимости на 7 исходной суммы (то есть нашего числа) необходимо и достаточно , чтобы сумма цифр:
an + ... + ai + ... + a0
- делилась на 7.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.