Учитывая положительное целое число п вывод суммы первых п десятичных цифр дробной части П п .
Пример ввода и вывода:
1 → 1
2 → 14
3 → 6
4 → 13
5 → 24
50 → 211
500 → 2305
5000 → 22852
Встроенные функции, вычисляющие цифры π или оценивающие либо степенные ряды, либо непрерывные дроби, не допускаются. Применяются стандартные лазейки . Ввод / вывод может быть в удобном формате (стандартный ввод, стандартный вывод, функция ввода / вывода и т. Д.).
Самый короткий код в байтах побеждает.
code-golf
math
arithmetic
pi
orlp
источник
источник
Ответы:
Python - 191 байт
~ В 4 раза быстрее версия - 206 байт
Ввод взят из стандартного ввода. Вывод для n = 5000 занимает примерно 14 секунд со вторым сценарием (или 60 секунд с первым).
Пример использования:
Используемая формула следующая:
где A n - это n- й переменный номер , который можно формально определить как число чередующихся перестановок в наборе размера n (см. также: A000111 ). Альтернативно, последовательность может быть определена как композиция чисел касательных и секущих чисел ( A 2n = S n , A 2n + 1 = T n ), подробнее об этом позже.
Малый поправочный коэффициент c n быстро сходится к 1, когда n становится большим, и определяется как:
Для n = 1 это равносильно оценке ряда Лейбница . Приближая π к 10 ½ , количество необходимых терминов можно рассчитать как:
который сходится (округляется) до 17 , хотя меньшие значения n требуют значительно большего.
Для вычисления A n существует несколько алгоритмов и даже явная формула, но все они квадратичны по n . Первоначально я кодировал реализацию алгоритма Зайделя , но он оказывается слишком медленным, чтобы быть практичным. Каждая итерация требует сохранения дополнительного слагаемого, и слагаемые увеличиваются по величине очень быстро («неправильный» тип O (n 2 ) ).
Первый сценарий использует реализацию алгоритма, первоначально заданного Кнутом и Бакгольцем :
Хотя это и не указано явно, этот алгоритм рассчитывает и Касательные Числа и Числа Секанта одновременно. Второй сценарий использует вариант этого алгоритма Брента и Циммермана , который вычисляет либо T, либо S , в зависимости от четности n . Улучшение является квадратичным по n / 2 , следовательно, улучшение в ~ 4 раза.
источник
Python 2, 246 байт
Я применил аналогичный подход к своему ответу на Расчет π с квадратичной сходимостью . Последняя строка принимает N-ю степень числа пи и суммирует цифры. Тест N = 5000 занимает минуту или около того.
Некоторые тесты:
Негольфированный код:
источник
a=j
иp=j
кa=p=j
IIRC. Может быть.Пиф, 33
Основываясь на этом ответе isaacg . Возможно, будет в гольф больше. Медленный.
источник