Желательно на python олимпиадное задание по информатике 2019 года
Число e = 2, 718281828459...
находит применение во многих разделах математики, в
первую очередь алгебре и математическом анализе. Очень часто это число называют числом Эйлера в честь великого математика XVIII в Леонарда Эйлера (1707-1783).
Леонард Эйлер впервые использовал букву e для обозначения этого числа в книге «Механика», изданной в 1736 г., хотя в рукописях и письмах такое обозначение было использовано начиная с 1728 г.
В своих книгах, статьях и рукописях Эйлер рассмотрел множество вычисления числа e. Очень интересен связанный с представлением числа Эйлера в виде бесконечной непрерывной дроби
Увеличивая число шагов, можно получить приближенное выражение числа Эйлера с высокой точностью в виде дроби. Необходимо написать программу для поиска числителя и знаменателя такой дроби при условии, что выбирается первый знаменатель, строго больший заданного числа n.
Формат входных данных:
В единственной строке входных данных записано целое число n ( 2 ≤ n ≤10 (в 9й степени))
Формат выходных данных:
Выведите два натуральных числа, разделенных пробелами – числитель и знаменатель дроби, приближенно выражающей число Эйлера, при этом знаменатель должен быть минимальным, но больше n.
Значение дроби можно вычислять так: начинаем с e = 0, затем обновляем значение e по формуле n / (n + e), уменьшая n, пока не получим 2 / (2 + ...). В конце прибавим к результату 2. Пример:
Все скучные операции с дробями оставим питону, пусть считает сам - у него для этого есть модуль fractions.
Знаменатели растут очень быстро - уже начиная с числа 13 знаменатель будет больше миллиарда.
Значение дроби можно вычислять так: начинаем с e = 0, затем обновляем значение e по формуле n / (n + e), уменьшая n, пока не получим 2 / (2 + ...). В конце прибавим к результату 2. Пример:
Все скучные операции с дробями оставим питону, пусть считает сам - у него для этого есть модуль fractions.
Знаменатели растут очень быстро - уже начиная с числа 13 знаменатель будет больше миллиарда.
Код (Python 3):
from fractions import Fraction
from itertools import count
n = int(input())
for k in count(3):
e = Fraction(0)
while k >= 2:
e = k / (k + e)
k -= 1
e += 2
a, b = e.numerator, e.denominator
if b > n:
print(a, b)
break
Пример ввода:
1000000000
Пример вывода:
6706022400 2467007773