Напишите функцию или полную программу, которая принимает положительное число nи выполняет nшаги итеративного алгоритма для вычисления π, имеющего квадратичную сходимость (то есть приблизительно удваивает количество точных цифр на каждой итерации), затем возвращает или печатает 2 n правильных цифр (включая начало 3). Одним из таких алгоритмов является алгоритм Гаусса-Лежандра , но вы можете использовать другой алгоритм, если хотите.
Примеры:
Вход 1→ Выход 3.1
Вход 2→ Выход 3.141
Вход 5→ Выход3.1415926535897932384626433832795
Требования:
- Каждая итерация алгоритма должна выполнять постоянное число основных операций, таких как сложение, вычитание, умножение, деление, степень и корень (с целым показателем / степенью) - каждая такая операция над «большими» целыми / десятичными числами считается как одно четное если он включает в себя один или несколько циклов внутри. Чтобы было ясно, тригонометрические функции и степени, включающие комплексные числа, не являются основными операциями.
- Ожидается, что алгоритм будет иметь шаг инициализации, который также должен иметь постоянное количество операций.
- Если алгоритму требуется еще 1 или 2 итерации, чтобы получить 2 n правильных цифр, вы можете выполнять до
n+2итераций, а не простоn. - Если это не было достаточно ясно, после правильных 2 n цифр ваша программа не должна ничего печатать (например, более правильные цифры, неправильные цифры или полное собрание сочинений Шекспира).
- Ваша программа должна поддерживать значения
nот 1 до 20. - Ваша программа не должна занимать более часа
nна современном компьютере (не жесткое правило, но старайтесь придерживаться его разумно). - Программа не должна получать более 20 точных цифр после инициализации и первой итерации алгоритма.
- Программа должна быть запущена в Linux с использованием свободно доступного программного обеспечения.
- Исходный код должен использовать только символы ASCII.
Подсчет очков:
Простой код гольф, самый короткий код выигрывает.
Победитель:
Победителем стала Digital Trauma, я наконец закончил запуск его кода на n = 20 (шучу). Специальный приз достается Primo за его очень быстрое решение на Python и другой алгоритм :)
~q^(n^2)соответствует 1-му разделу там и ~q^2согласно 2-му разделу там.
