Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Поясните пожалуйста.

Автор: Harsent 14.03.2006 14:24

Задачка такая:

Код
Выяснить, делится ли на 7 двоичное число, состоящее не более чем из 1000 цифр.


Т.е нужно перебрать все цифры от 1000 до 9999 и узнать, какие из них деляться на 7?

Автор: Ozzя 14.03.2006 14:33

Нет.
Двоичное число - это число вида 010101010101111.
Количество цифр в этом числе не более 1000.
Нужно узнать делится ли такое число на 7.

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

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

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


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

Автор: Harsent 14.03.2006 14:48

Цитата(Ozzя @ 14.03.2006 10:33) *

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

В условии этого не сказано, но других путей, кроме как, перевода в десятичное, я, например, не представляю smile.gif значит, разрешено всё то, что не запрещено smile.gif

Автор: Harsent 15.03.2006 9:09

Help! blink.gif

Автор: klem4 15.03.2006 11:54

http://forum.pascal.net.ru/index.php?s=&showtopic=4535&view=findpost&p=38226

Автор: мисс_граффити 15.03.2006 13:20

а нет ли какого-нибудь специфического признакак для восьмеричной сс?
мне кажется, что-то аналогично 9 в 10 сс.

Автор: Malice 15.03.2006 14:10

Переводить 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

Автор: мисс_граффити 15.03.2006 15:16

Malice, я про это, собственно, и пыталась сказать smile.gif
разбиением на триады фактически переходим к восьмеричной.

Автор: lapp 16.03.2006 11:12

Цитата(мисс_граффити @ 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.