Спор двух программистов

Один про­грам­мист при­шёл к дру­го­му и, немно­го выпив, говорит:

— Зага­дай любое нату­раль­ное чис­ло X!

— Отстань

— Нет, загадай.

— Ну, загадал.

— А теперь при­ду­май три любых целых чис­ла от 6 до 8 включительно.

— При­ду­мал, и что дальше?

— А теперь умножь своё началь­ное чис­ло X на пер­вое из них, при­бавь вто­рое и отни­ми тре­тье. Сколь­ко у тебя получилось?

— Минут­ку… 164.

— Ха, а я знаю, какие ты чис­ла загадал!

— Что, все четы­ре чис­ла вычислил?!

— Ага!

— НО КАК?!

Дей­стви­тель­но, как пер­во­му про­грам­ми­сту уда­лось узнать все чис­ла, кото­рые зага­дал второй?

Решение

Обо­зна­чим три зага­дан­ных чис­ла от 6 до 8 как A, B и C. Если мы сде­ла­ем всё, как напи­са­но в зада­че, то полу­чим равен­ство: A × X + B − C = 164.

Из это­го полу­чим X:

X = (164 − B + C) / A

Исключаем число 7

Если A = 7, то чис­ли­тель нашей дро­би дол­жен наце­ло делить­ся на 7, пото­му что X не может быть дроб­ным (по усло­вию X — нату­раль­ное чис­ло). Чис­ла, близ­кие к 164, кото­рые делят­ся на 7 — это 161 и 168.

Что­бы полу­чить 161 в чис­ли­те­ле, чис­ла B и C долж­ны отли­чать­ся друг от дру­га на 3, а это невоз­мож­но, пото­му что мак­си­маль­ная раз­ни­ца рав­на 8 − 6 = 2.

Что­бы полу­чить 168 в чис­ли­те­ле, чис­ла B и C долж­ны отли­чать­ся друг от дру­га на 4, а это тоже невоз­мож­но, пото­му что мак­си­маль­ная раз­ни­ца рав­на 8 − 6 = 2.

Зна­чит, A точ­но не рав­но 7. Запом­ним это.

Если чис­ло A точ­но не 7, то оно чёт­ное — 6 или 8. Это зна­чит, что чис­ли­тель (164 − B + C) тоже чёт­ный, что­бы в резуль­та­те деле­ния полу­чи­лось целое чис­ло. А это воз­мож­но, если чис­ла B и C оба чёт­ные или оба нечётные.

Если чис­ла B и C оба нечёт­ные, то это воз­мож­но толь­ко в слу­чае, если они оба рав­ны 7. В этом слу­чае −B + C = 0, и в чис­ли­те­ле оста­ёт­ся толь­ко 164, кото­рое нам пред­сто­ит раз­де­лить на 6 или 8. Но 164 не делит­ся наце­ло ни на 6, ни на 8, зна­чит, они тоже не рав­ны 7.

Исключаем одинаковые B и C

Из послед­не­го при­ме­ра мы виде­ли, что B и С не могут быть оди­на­ко­вы­ми в прин­ци­пе, неваж­но, чёт­ны­ми или нечёт­ны­ми, поэто­му оста­ют­ся толь­ко два варианта:

B = 6, C = 8 или B = 8, C = 6.

Проверяем оставшиеся варианты

Если B = 6 и C = 8, то в чис­ли­те­ле полу­ча­ет­ся так: (164 – 6 + 8) = 166. Но 166 не делит­ся наце­ло ни на 6, ни на 8 (воз­мож­ные зна­че­ния A), зна­чит, этот вари­ант мож­но исключить.

Полу­ча­ет­ся, что оста­ёт­ся толь­ко пара B = 8 и C = 6: (164 – 8 + 6) = 162. Чис­ло 162 наце­ло делит­ся толь­ко на 6: 162 / 6 = 27, зна­чит, A = 6, а вто­рой про­грам­мист зага­дал чис­ло 27:

X = 27

A = 6

B = 8

C = 6

Про­ве­ря­ем: 6 × 27 + 8 − 6 = 164. Всё сходится.

Текст:

Миха­ил Полянин

Редак­ту­ра:

Мак­сим Ильяхов

Худож­ник:

Даня Бер­ков­ский

Кор­рек­тор:

Ири­на Михеева

Вёрст­ка:

Мария Дро­но­ва

Соц­се­ти:

Олег Веш­кур­цев