• Авторизация


Преотличное число 18-06-2025 21:08 к комментариям - к полной версии - понравилось!


Информатика

Владимир Ильин

preotlichnoje_chislo_fig1_260 (260x610, 103Kb)

– А мы на информатике перешли на новый level! Начали изучать Питон! — важно сказал восьмиклассник Вовка, только пришедший из школы.

– Рептилий изучают на зоологии! — ответил Андрей, младший брат Вовки, оторвавшись от компьютерной игры.

– Сам ты рептилия! — усмехнулся Вовка. — Питон — это язык программирования, и назван он так не в честь змеи, а в честь телевизионного шоу «Monty Python». Впрочем, пишется так же, как змея.

– Ну и что же такого особенного в твоём Питоне?

– Да пока не знаю, — честно признался Вовка. — Мы же его только начали. Научились устанавливать и узнали, что в нём есть длинная арифметика и нет особой разницы между строками и числами!

– Как это? — спросил Андрей. Услышанное его не очень вдохновило. Сказать по правде, он не любил арифметику, всякий там устный счёт. А тут ещё «длинная»...

– Ну смотри. На твоём калькуляторе всего 10 разрядов. Это значит, что ты можешь работать только с десятизначными числами. А Питон может вычислять хоть сто-, хоть миллион-, да хоть миллиард-секстиллионовзначные! — Как и многие дети, Вовка верил во  всемогущество компьютеров.

– Сейчас покажу, давай его установим.1 А пока устанавливается, придумаем, что бы нам такого... длинного посчитать.

1 На сайте python.org в разделе Download (ссылка слева) скачайте инсталлятор (для Windows — вверху страницы Python Windows x86 MSI Installer) и установите.

– А, вот! Недавно читал в «Занимательной арифметике». Шах одной восточной страны пообещал изобретателю шахмат любую награду. Тот попросил... насыпать зёрен риса на каждую клетку доски. На первую клетку одно зерно, на другую — два, на третью — четыре... и так далее, каждый раз в 2 раза больше. Шах обрадовался, что просьба, как ему показалось, так ничтожна, и немедленно приказал всё выдать. Жадность подвела шаха! В книжке доказывается, что всего получается 264 – 1 зёрен, а это очень много. Давай посчитаем, сколько времени понадобилось бы визирям, чтобы отмерить рис точно, даже если бы у них было столько зёрен.

– Запускаем2, — продолжил Вовка, у которого уже всё установилось, — можно считать!

2 Пуск — Все программы — Python 3.3 — Python (command line).

Андрея несколько удивило то, что он увидел. Вместо привычных значков и кнопок в чёрном окне было что-то написано по-английски и просто мигал курсор.

preotlichnoje_chislo_fig2_300 (265x700, 179Kb)

– Ну вот. Сюда можем вводить команды, — пояснил Вовка.– Скажем,

>>> 2+2

нажимаем Enter и... вуаля:

4

Вовка посмотрел на Андрея с торжествующим видом, как будто сделал что-то очень важное и необычное.

– А как умножение, степень писать? — спросил Андрей.

– Очень просто — смотри! Плюс как +, минус как –, умножение — звёздочкой *(Shift 8), степень двумя звёздочками (**), деление — прямым слешем (/). Можно делить нацело (//). Например, 29/10 — это две целых девять десятых, а 29//10 — ровно 2. И ещё брать остаток от деления (%). У нас получается...

>>> 2**64 — 1

– ввёл Вовка и нажал Enter, — 18446744073709551615 зёрен!

– Немало! — сказал Андрей. — Предположим, что они считали вдесятером и каждый отсчитывал 100 зёрен в секунду... В минуте 60  секунд, в часе 60 минут... в тысячелетии 1000 лет... Готово. Давай не будем считать доли тысячелетий, разделим нацело. И Андрей набрал:

>>> 2**64-1//100*60*60*24*365*1000

18446744073709551616

– Ерунда какая-то!

– Конечно, — сказал Вовка, — как и в математике, в Питоне можно и нужно ставить скобки.

>>> (2**64-1)//(100*60*60*24*365*1000)

Компьютер ответил:

5849424

– Пять миллионов восемьсот сорок девять тысяч четыреста двадцать четыре тысячелетия и ещё немного. Изобретатель шахмат, наверное, изобрёл ещё и эликсир бессмертия, если собирался столько ждать! — засмеялся Андрей.

– Слушай! На маткружке мы придумали преотличное число: 550 — это произведение пятидесяти пятёрок, а Мёбиус — так называли учителя информатики — дал нам задачу:

Доказать, что существует число без нулей, которое делится на преотличное.

Самый простой способ доказать, что что-то существует, — это просто найти его! Вперёд, Питон!

>>> 5**50

88817841970012523233890533447265625

Сначала Андрей очень обрадовался, потому что ему первому из всего класса удалось «вживую» увидеть преотличное число. Но радость была недолгой. В самом преотличном оказалось целых три нуля...

preotlichnoje_chislo_fig3_300 (300x660, 105Kb)

– Ничего, продолжим! — сказал Андрей и начал умножать преотличное на два, семь... Ничего не помогло, даже возведение в квадрат. Везде оказывались нули...

– Мы можем попробовать «выгнать» нули из преотличного, — предложил Вовка. Возьмём, допустим, 1023. Умножим на 101 — ноль исчезнет или хотя бы переедет левее: 1023•101 = 102300 + 1023 = 103323.

Теперь его можно умножить на 10001 (или 1023 сразу на 10101, это одно и то же).

– А, понял! — сказал Андрей и быстро умножил 550 на 1000000000001:

88817841970101341075860545970499515533447265625

Последний ноль «переместился» на 19-е место справа.

– Попробуем умножить на 1000001000000000001...

Число стало значительно длиннее, но ноль переехал левее — на 26-ю позицию. Потом на 32-ю, 49-ю. Умножение преотличного на 10000000000000000100000100 00001000001000000000001 «сдвинуло» последний ноль на 63-е место справа. Но левее него всё равно оставалось несколько нулей! Андрей устал.

– А что, если нули никогда не «выгонятся»? — спросил он.

Вопрос Вовку поставил в тупик. Действительно, даже на примере 1023 при таких умножениях ноль останется всегда! Ребята приуныли. Но тут вмешался папа.

– Какие признаки делимости вы знаете? — спросил папа.

– На 2, 3, 4, 5, 9, 10... При чём здесь это?

– На 4 — это хорошо! А на 8?

– Ну, последние три цифры должны делиться на 8. Это элементарно, потому что если их «откинуть», будет число, заканчивающееся тремя нулями, а тысяча делится на 8.

– Замечательно, а на преотличное?

– Такого мы не проходили, — обиженно ответил Андрей, подозревая, что папа просто издевается.

– ...Может, если последние 50 цифр числа делятся на преотличное, то и само число делится! Ну и что?.. — задумался Вовка.

– А вот что! — радостно продолжил он. — Ноль у нас сейчас на 63-й позиции. Возьмём последние 50 цифр числа — это и будет ответ!

– Сам отсчитывай, — огрызнулся всё ещё расстроенный Андрей.

– А вот и не буду! Питон — сила! Просто найдём остаток от деления нашего монстра на один с  пятьюдесятью нулями. Строки в Питоне записываются в кавычках. Их тоже можно складывать и даже умножать, при этом они «склеиваются». Смотри, — Вовка набрал:

>>> «Вовка–молодец!» *100

На экране высветилось ещё сто надписей «Вовка–молодец!».

– «Соберём» наше число:

>>> int("1"+"0"*50)

Тут int для того, чтобы со строкой как с числом производить арифметические действия. Можно, конечно, и просто 10**50 написать, но со строками интереснее! Обратно — функция str. Она переводит число в  строку. Это чтобы можно было действовать с числом как со строкой. Например:

>>> len(str(5**50))

35

– Функция len ищет длину строки. Значит, в твоём преотличном — 35 знаков! Посчитай! — съехидничал Вовка.

Таким образом...

>>> 5**50*1000000000000000010000010000001000001000000000001 % int("1"+ "0"*50)

– Ну вот и ответ:

75394925527871325954265557811595499515533447265625

– Проверим, — сказал Андрей, который к этому времени немного успокоился.

>>> 75394925527871325954265557811595499515533447265625 % (5**50)

0

– Точно! Остаток равен нулю, значит делится! И нулей нет!

– А вот здесь, кстати, скобки необязательны, — заметил Вовка. — Потому что в Питоне, как в  математике, — если без скобок, то сначала степень (**), потом умножение и деление (*, /, //), а потом сложение и вычитание.

Андрей вывел число на принтер — то-то Мёбиус удивится!

«Длинные» задачи

1. Профессор Бурик не верит, что число возможных различных состояний кубика Рубика равно 43 252 003 274 489 856 000. 1 января 2014 года в полночь он запустил для проверки свой компьютер, который проверяет миллиард состояний в секунду. Во сколько Бурику надо быть дома, чтобы увидеть результат?

2. Докажите признак делимости на преотличное.

3. Сколько среди первой тысячи степеней двойки, считая с первой, начинаются с единицы?

Подсказка: поможет определение длины строки, функции len и str.

Художник Артём Костюкевич

elementy.ru

i (2) (150x150, 4Kb)

вверх^ к полной версии понравилось! в evernote


Вы сейчас не можете прокомментировать это сообщение.

Дневник Преотличное число | stewardess0202 - Дневник stewardess0202 | Лента друзей stewardess0202 / Полная версия Добавить в друзья Страницы: раньше»