Pi - иррациональное число , что означает, что его десятичное представление никогда не заканчивается и не повторяется.
Пи усекается до 41 десятичного знака (40 знаков) 3.1415926535897932384626433832795028841971
.
Если мы игнорируем десятичную точку и перечисляем цифры как последовательность натуральных чисел, избегая дубликатов , мы получим 3 1 4 15 9 2 6 5 35 8 97 93 23 84 62 64 33 83 27 950 28 841 971
( OEIS A064809 ).
(Обратите внимание, что 15
появляется в последовательности вместо того, 1 5
потому 1
что уже произошло.
Также обратите внимание, что 0
не происходит, потому что это не является положительным; 950
содержит первый ноль.)
Чтобы построить первое число pirrational, мы используем эту последовательность для индексации цифр числа Pi (первая цифра - 3, вторая - 1 и т. Д.).
Таким образом, первая цифра первого пиративного числа - это третья цифра числа Пи,
вторая цифра - первая цифра числа Пи,
третья цифра - это четвертая цифра числа Пи,
четвертая цифра - пятая цифра числа Пи
и т. Д.
Десятичная точка добавляется после первой цифры, чтобы имитировать Pi.
Таким образом, первое число до 41 цифры 4.3195195867462520687356193644029372991880
.
(Обратите внимание, что для 30-й цифры мне пришлось пройти весь путь до 974-й цифры Пи.)
Чтобы построить второе число pirrational, процесс повторяют, используя первое число piral вместо Pi. (Сам пи можно назвать нулевым пиратральным числом.) Таким образом, новая последовательность - это 4 3 1 9 5 19 58 ...
и первое индексное число индексируется для получения второго, который начинается 9.14858...
.
Дальнейшие пирральные числа создаются таким же образом, каждое генерируется из предыдущего.
Вызов
Ваша задача состоит в том, чтобы написать самую короткую возможную программу, которая принимает два целых числа N
и D
, и выводит N
пиральное число, усеченное до D
десятичных цифр.
D
всегда положительно, но N
неотрицательно, и D
цифры Pi должны выводиться, когда N
равно 0.
Когда D
равно 1, не имеет значения, присутствует ли десятичная точка или нет.
Входные данные должны поступать из stdin или командной строки, а выходные данные - из stdout (или ближайших альтернатив вашего языка).
Ваша программа должна работать для всех входных значений N
и D
ниже 2 16 , но она не должна быть своевременной или эффективной.
Самый короткий код в байтах побеждает.
(Обратите внимание, что в других базах существуют пиральные числа, но все в этом задании сделано в базе 10.)
N=1
, D=13393
например, вам нужна 31 - миллионной цифры PI