Напишите функцию или полную программу, которая принимает положительное число 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-му разделу там.