Для начала рассмотрим задачу, которую всё-таки могут предложить на собеседовании.
38. Вычислить сумму ( «Задачи для детей от 5 до 15 лет»)
(с ошибкой не более 1% от ответа)
Алгоритм для вычисления частичных сумм этого ряда на языке Scheme (Lisp) в среде drRacket (drRacket позволяет производить вычисления в обыкновенных дробях):
#lang racket (define series_sum ( lambda (n) (if (= n 0) 0 (+ (/ 1 (* n (+ n 1))) (series_sum(- n 1))) ) ) ) (series_sum 10) (series_sum 100) (series_sum 1000) (series_sum 10000) (series_sum 100000) (series_sum 1000000) (define series_sum_1 ( lambda (n) (if (= n 0) 0 (+ (/ 1.0 (* n (+ n 1.0))) (series_sum_1(- n 1.0))) ) ) ) (series_sum_1 10) (series_sum_1 100) (series_sum_1 1000) (series_sum_1 10000) (series_sum_1 100000) (series_sum_1 1000000)
Два последних примера drRacket вычислил с ошибкой

Если рассмотреть частичные суммы в обыкновенных дробях, то можно заметить, что сумма ряда равна
Напомню, что при
Во втором томе «Курса дифференциального и интегрального исчисления» (363) рассматривается общий случай
Далее, перейдём к основной теме статьи и рассмотрим ещё один пример из задачника.
43. Числа кроликов («Фибоначчи»), образуют последовательность в которой для всякого . Найти наибольший общий делитель чисел и .
Ответ: Два соседних числа Фибоначчи взаимно просты, т.е.
(gcd — это greatest common divisor, т.е. НОД).
Доказательство из книги «За страницами учебника математики» [10-11]:
Из равенства следует, что . Пятясь таким образом назад, придём к , а потому два соседних числа Фибоначчи взаимно просты.
Доказательство того, что в книге не приводится, но по алгоритму Евклида
где — остаток от деления на
а поскольку для чисел Фибоначчи
то
Еще один пример из задачника
53. Для последовательности чисел Фибоначчи задачи 43 найти предел отношения при стремлении к бесконечности:
Ответ: «золотое сечение», .
Рассмотрим отрезки, представляющие собой разности двух соседних членов ряда .

Четные члены ряда представляют растущую последовательность
Нечетные члены ряда представляют убывающую последовательность
По лемме о вложенных промежутках (Курс дифференциального и интегрального исчисления, 38)
Для нашего ряда в точке справедливо равенство
Произведя замену , получим искомое решение.
Визуализация сделана в программе geogebra

Следующий пример из задачника
54. Вычислить бесконечную цепную дробь
Рассмотрим уравнение
Согласно теоремам 236 и 235 из книги «Теория чисел»:
Составляем таблицу значений и при
| 1 | 2 | |
|---|---|---|
| P | 1 | 3 |
| Q | 1 | 2 |
так что
и поскольку то
Рассмотрим задачу из книги «За страницами учебника математики» [10-11]
4. Покажите, что число равно числу , задающему золотое сечение.
Варианта
Курс дифференциального и интегрального исчисления, 35 (2):
Таким образом получается из по формуле
… По основной теореме, варианта имеет некий конечный предел . Для определения его перейдём к пределу в равенстве
Мы получим, таким образом, что удовлетворяет квадратному уравнению
Уравнение это имеет корни разных знаков; но интересующий нас предел не может быть отрицательным, следовательно, равен именно положительному корню:
Из чего можно сделать вывод, что «золотое сечение» является решением уравнения
при .
Далее, рассмотрим варианту
Курс дифференциального и интегрального исчисления, 35 (3):
Пусть — любое положительное число, и положим . Написанное выше рекуррентное соотношение заменится таким:
Взяв начальное значение под условием: , получим, что , монотонно возрастая, будет стремиться к . По этой схеме на счётных машинах и вычисляется число, обратное .
Алгоритм вычисления числа, обратного на языке Python:
def reciprocal(c,y0,n): arr=[] for i in range(n): arr.append(y0) y0=y0*(2-c*y0) return arr
Функция reciprocal принимает на вход число , начальное значение , количество итераций и возвращает массив «приближений» к числу .
при
при
при
и т.д.
Примеры работы функции reciprocal при различных
>>> reciprocal(3,0.1,10)
[0.1, 0.17, 0.2533, 0.31411733000000003, 0.3322255689810133, 0.3333296519077525,
0.3333333332926746, 0.33333333333333337, 0.33333333333333337, 0.33333333333333337]
>>> reciprocal(8,0.1,10)
[0.1, 0.12, 0.1248, 0.12499968, 0.1249999999991808, 0.125, 0.125, 0.125, 0.125, 0.125]
>>> reciprocal(5,0.1,10)
[0.1, 0.15000000000000002, 0.18750000000000003, 0.19921875000000003, 0.19999694824218753, 0.1999999999534339, 0.20000000000000004, 0.19999999999999998,
0.19999999999999998, 0.19999999999999998]
(Т.о. применение этого алгоритма требует ограничений)
В завершение: хотелось бы напомнить всем о задаче Много битов из ничего из журнала «Квант». Задача предполагает решение методом перебора и уже упоминалась на Хабре — вот, вот, вот, вот и вот.
Книги:
«Задачи для детей от 5 до 15 лет», В. И. Арнольд.
«Курс дифференциального и интегрального исчисления», Г. М. Фихтенгольц.
«Теория чисел», А. А. Бухштаб.
«За страницами учебника математики», Н. Я. Виленкин, Л. П. Шибасов, З. Ф. Шибасова.
ссылка на оригинал статьи https://habr.com/post/419237/
Добавить комментарий