Написано для Артёма.
Посвящается фанфикам по Поттеру.
Я, может, только жить начинаю: на пенсию перехожу.
= Точно — это про тебя.
— Математику, я люблю со школы, читал множество книг, а сейчас вот задумался, из всего чем нас мучили, в жизни пригодилась только элементарная арифметика[1].
Но может я просто не замечал, что некие практические задачи можно было бы решить дифференцированием, интегрированием, поиском экстремумов и подобным.
= Знаешь анекдот: Дети решите задачу «У Маши 4 груши...» «Но, Марья Ивановна мы проходили только про яблоки».
— Да, да я именно об этом. Для примера я взял квадратные уравнения [КУ], уж сколько нас ими жучили, сколько перерешали примеров, а за всю рабочую практику, ни разу не понадобилось... решил поискать в интернете, нечто подобное: «практическое применение квадратного уравнения»
= Представляю, чего ты там только не нашел. Потом проверю.
— Да, нашел много, но в одной из первых была ссылка на задачу сформулированную еще в древней Греции.
Два числа в сумме дают 20, а их произведение равно 96. Ну, ясное дело, надо определить эти числа.
Стало интересно, неужели я, такой крутой, не решу древнюю задачу.
Приведу это, совсем простое, решение подробно, по шагам, дабы ты смог его проверить.
1. Дана система:
x + y = 20
xy = 96
(фигурную скобочку системы на тексте не изобразить, да ты меня простишь)
2. из второй строки системы находим у
y = 96 / x
3. подставляем найденный у в первую строку
x + 96/x = 20
4. умножаем все на х
x2 + 96 = 20x
5. переносим правую часть и приводим к общепринятому виду (это называется приведенное квадратное уравнение)
x2 — 20x + 96 = 0
Вот тут я притормозил. Да, видимо жучили нас мало, за полвека формулу я забыл, если бы мне ее показали я узнал бы ее слету, вот, что значит нет постоянной практики.
= Так в чем проблема, посмотри в Интернете.
— Нет, легкие пути не для нас.
Тут я посмотрел на вторую строку системы
xy = 96
из этого следует, что в 96, в качестве сомножителей содержатся оба корня!!!
т.е. если, это самое, 96 разложить на простые сомножители (а это задача 6 класса) и из их комбинации выбрать дающие в сумме 20, то вот оно - дерево и мужик в пиджаке!!!
— Делаем, давай я изложу опять до идиотизма просто:
96 — четное — делим на два в результате 48
48 — четное — делим на два в результате 24
24 — четное — делим на два в результате 12
12 — четное — делим на два в результате 6
6 — четное — делим на два в результате 3
в итоге:
96 = 2 • 2 • 2 • 2 • 2 • 3
= Спасибо за идиота, но бухти дальше.
— Предположим что первый корень = 2 тогда второй 48
= Не подходит, в сумме не 20, а 50
— Хорошо, тогда первый корень 2 • 2 = 4, а второй 2 • 2 • 2 • 3 = 24
= Опять не пойдет, в сумме 28.
— Попытка номер... первый корень 2 • 2 • 2 = 8, а второй, что осталось: 2 • 2 • 3 = 12
= Ну, надо же, угадал!
— Не угадал, а вычислил.
= Погоди, я проверю.
— Я уже все проверил. Вся сходится.
В том числе проверил и по стандартной формуле нахождения корней квадратного уравнения, забавно, что при этой проверке я ошибся, запутался в арифметике.
= Не забавно, а показательно.
— Возможно. Так я наслаждался победой целый день, а на следующий — до меня дошло!!!
= Что дошло, к чему восклицания?
— Просмотри, выше изложенное, ничего не замечаешь?
= Пока ничего.
— Хорошо, изложу доступнее:
система:
x + y = S
xy = M
тождественна:
x2 — Sx + M = 0
= Ну, и что. Согласен, я тебе верю.
— В математике, верить нельзя. Надо проверять доказательства.
= Ладно, доказал, но к чему ты ведешь?
— Посмотри же! Любое приведенное квадратное уравнение легким движением можно превратить в систему, а точнее коэффициент S является суммой корней (с минусом), и коэффициент M их произведением.
Отсюда следует, что 90% «школьных» приведенных КУ можно легко решить в уме.
КУ
Попробуем?
= Давай.
— Напомню последовательность действий:
1. разложение коэффициента M на простые сомножители
Простых чисел до 100 не так уж много:
2 |
3 |
5 |
7 |
11 |
13 |
17 |
19 |
23 |
29 |
31 |
37 |
41 |
43 |
47 |
53 |
59 |
61 |
67 |
71 |
73 |
79 |
83 |
89 |
97 |
|
|
|
2. выбор полученных корней в сумме дающих S
= Все понятно, поехали.
— Для x2 — 7x + 10 = 0 корни будут 2 и 5.
= Да, я вижу, (x2 — [2+5]x + [2 • 5] = 0) проверим:
2 • 2 — 7 • 2 + 10 = 4 — 14 + 10 = 0
5 • 5 — 7 • 5 + 10 = 25 — 35 + 10 = 0
Все сошлось, я тоже хочу попробовать.
— Пробуй: x2 — 16x + 39 = 0
= Корни 3 и 13. Ну, надо же! Я Вижу!!! Еще хочу!
x2 — 3x + 2 = 0
корни 1 и 2.
= Попался! Это все знают! 1 не является простым числом.
— Ну и что, хоть горшком назови, ну пусть 1 будет «сверх простым числом», но корнем этого уравнения оно является.
= Тогда я предлагаю такое уравнение x2 — 4x = 0 и корни будут 0 и 4.
— Согласен. А реши такое x2 + 18x + 65 = 0
= Решение 5 и 13.
— Неверно.
= Погоди, проверю 13 • 5 = 65; 13 + 5 = 18 ты не прав. Все верно.
— А ты подставь корни в квадратное уравнение.
= Да, не получается, а в чем дело.
— Ты забыл смотреть на знаки. Ответ будет -5 и -13
= Ну, надо же. А я думал, что все проще некуда.
— Давай разберемся со знаками. Вот базовая формула: x2 — Sx + M = 0. При коэффициенте M плюс будет если оба корня положительны или оба они отрицательны. Знак при S зависит от суммы положительных или отрицательных корней взятой со знаком минус.
= Чего-то ты перемудрил.
— Ну смотри. Если при M стоит минус. Значит насторожись, один из корней отрицателен.
Если + Sx + M, то к гадалке не ходи, оба корня отрицательны. Ну лучше опробуем все это на практике.
x2 — [5+2]x + [5•2] = x2 — 7x + 10 = 0
x2 — [-2+5]x + [-2•5] = x2 — 3x — 10 = 0
x2 — [-5+2]x + [-5•2] = x2 + 3x — 10 = 0
x2 — [-5 + -2]x + [-5•-2] = x2 + 7x + 10 = 0
= В общем понятно, - потренироваться надо.
— Приступай.
x2 — 8x + 12 = 0;
x2 — 2x — 3 = 0;
x2 — 5x + 4 = 0;
x2 — 13x + 12 = 0;
x2 — 7x + 12 = 0;
x2 — 15x + 26 = 0;
x2 + 14x + 45 = 0;
x2 + 3x - 70 = 0;
x2 — 12x + 35 = 0;
— А дальше тренируйся дома «на кошках». Открой учебник и пиши ответы.
— Давай разберем еще два случая.
x2 — 10x + 100 = 0
= Чего-то не понял.
— Уравнение решения не имеет. 100 = 2•2•5•5 при любой комбинации сомножителей сумма будет больше 10.
= Занятно.
x2 — 6x + 9 = 0
— Уравнение имеет единственное решение 3.
— А если так, x2 — 5x + 9 = 0 то решений нет.
= Ну, надо же. И все исходит из волшебной системы?!!
— Как видишь, большинство «школьных» уравнений, ты решишь одной левой.
Но возможны и сложности, например, такой коварный случай:
x2 + 4x + 2 = 0
= Как было сказано «два плюса значит — два отрицательных корня», но не соображу, как может сумма быть больше произведения?
— Подумай! Достаточно абсолютному значению хотя бы одного из корней быть меньше единицы, и в данном случае корни:
—2 — √2 ≈ -3.414213562373095
и
—2 + √2 ≈ -0.5857864376269049
= Т.е. просто глянув на формулу можно многое сказать о корнях, да интересно.
= А что ты называешь «школьным» уравнением.
— В свое время, учась в школе, я заметил, что школьная математика дается в «приглаженном» виде, посмотри в геометрических задачах все углы — 30°, 45°, 60°, 90° а алгебре, как правило, в задании и в ответе целые числа. Последние называются Диофантовы уравнения.
//
Диофантово уравнение — это уравнение вида P(x1, ... , xm) = 0,
где P — целочисленная функция (например, полином с целыми коэффициентами), а переменные принимают целые значения. Названы в честь древнегреческого математика Диофанта.
//
— Кстати задача, которую мы изначально решали, также приписывается Диофанту.
= Вот приду завтра в школу и умою всех отличников.
— / вот выйду из тюрьмы. Куплю костюм с отливом.../
= Скажу Нельке «открой задачник на любой странице и выбери пример» и с ходу раз — ответ, и пока она пыхтит, проверяет, второй пример, третий.
— / Куплю костюм с отливом. И в Гагры.../
= Слушай. Чё-то мне не верится, что за две с половиной тысячи лет никто не нашел такого способа.
— И мне не верится. Но, мы не специалисты, наверное профессиональный математик скажет «на такой-то странице такой-то работы Гаусса или скажем Эйлера есть упоминание о данной теме, в качестве курьеза[2]».
— Но мне кажется, что это тайный инструмент составителей задачников для школьников. Согласись, что составить задачу с заданными свойствами ничего не стоит.
= Тогда Нельке я скажу «назови мне два числа, и я тебе напишу квадратное уравнение, где корнями буду эти два числа». Так пожалуй еще круче. .... но придется признаваться как я это делаю.
— Да не проблема, расскажи и покажи. Но, во время демонстрации помни о коварных случаях например x2 — 5x — 3 = 0.
= Ничего, выкручусь, по крайней мере поражу народ своим анализом корней, а затем скажу, что сегодня с отрицательными корнями не хочу возится.
= А, вот еще вопрос. Мы с тобой рассматривали уравнения типа x2 + bx + c = 0, а если будет полное квадратное уравнение: ax2 + bx + c = 0?
— Элементарно, Ватсон. Раздели полное уравнение на а, и получишь приведенное, а дальше ты знаешь.
= Но тогда получатся дробные коэффициенты.
— Мудрость состоит в том, что не стоит бараном упираться в любой принцип, ежели разделение дроби на сомножители составляет трудность, вспоминай о дискриминанте и прочих радостях стандартной формулы.
Но давай поиграемся с корнями 0.5 и 1.5
x2 — [0.5 + 1.5]x + [0.5 • 1.5] = x2 — 2x + 0.75 = 0
давай для удаления дроби, умножим на 100
100x2 — 200x + 75 = 0
Т.е. по крайней мере составлять уравнение по любым корням ты сможешь, и разбитое сердце для Нелли обеспеченно.
= Я тоже хочу попробовать.
— Ну, давай, давай что-нибудь не обычное, пусть будет корень из тринадцати, итак корни КУ 1 + √13 и 1 — √13.
= Крибле крабле бумс: x2 — 2x — 12 = 0
= «Айнун цванцих фирун зихцих» или как говорили древние финики «Повторение мать мучения»
— Финикийцы?!
= Финики — веселее. Давай я повторю все что понял:
--------------------------------------
1. Посмотреть на знаки
--------------------
— + оба корня положительны
— — один корень отрицателен, но положительный больше*
+ — один корень положителен, но отрицательный больше*
+ + оба корня отрицательны
* больше при сравнении абсолютных величин корней.
--------------------
2. Если M меньше S значит абсолютная величина хотя бы одного корня больше нуля, но меньше единицы.
3. Если M удалось разложить на множителе и их сумма (с учетом знаков) равна S — демонстрируем свои феноменальные способности.
3а. Иначе, быстренько считаем дискриминант или шустренько врем «голова заболела,... я уже устал,... на сегодня достаточно...»
4. В случаях 2 и 3а — плавно переходим к демонстрации изготовления уравнений по заданным корням, это дело беспроигрышно (главное не запутаться в арифметике).
--------------------------------------
— Отлично. Теперь ты готов к подвигам?
— Проверим. Реши такое: — x2 — 7x — 12 = 0
= Два минуса значит...
— Два плюса!! И минус с Гриффиндора за невнимательность. Учитывай коварство противника.
= Понял -3 и -4.
— Я не сказал бы, что ты готов. Побольше тренеруйся и внимательность.
= Спасибо, за отличный прикол. Это будет ШОУ!!!
— Успехов в кардио-математических делах.
Научи меня плохому.
= Спасай!!!
/ Шеф! Все пропало! /
= Шоу под угрозой, а отказаться нельзя.
/ Все, кина не будет. Электричество кончилось. /
— Что случилось?
/ У тебя там не закрытый… а открытый перелом? /
= Сгорел уже на третьей задаче! Хорошо еще, что хвалился своим друзьям, и как заклинило, отговорился, что надо делать уроки и т.п. Но завтра в школе они всем расскажут, и с меня потребуют демонстрацию.
/ Семё-ё-н Семёныч!… /
— Я тебе говорил, что фокусы, как и экспромты, надо тщательно готовить. Потренировался бы побольше, подготовил..., а это мысль...
— Все мои проблемы я...
= Я знаю, все твои проблемы ты решаешь программным путем.
— Да, именно так. План такой: как генерировать квадратные уравнения мы знаем, а значит пишем программку...
/ Лёгким движением руки брюки превращаются… Брюки превращаются… Превращаются брюки… /
Так, это дело займет не пять минут, посмотри пока фильм.
= Брильянтовую ногу?
— Можно и это, но я имел в виду «Праздник святого Йоргена»
............
= Фу..... черно-белый! Немой!!!
— Ну, и что. Фильм тридцатого года, но зато здорово объясняется, как надо готовить чудеса.
...........
— Оторвись, потом досмотришь.
/ Дичь не улетит, она жареная /
— В последнее время я учусь работать с Питоном. Достаточно интересный язык, но особо хвалить или ругать рано, надо получше познакомится.
— Но для начала одно предупреждение. Питон очень требователен к правильному применению отступов, к сожалению fb2 «съедает» лишние пробелы или табуляции, да, есть теги для оформления кода, но не все читалки правильно их воспринимают.
/ Я считаю, что человеку можно верить только в самом крайнем случае. /
Поэтому для зрительного восприятия отступов группы пробелов (табуляцию) я заменю группой точек и пробелов « . . »
= Ясно, при необходимости заменить их на табуляцию. Но не растягивай, у меня время поджимает.
/ Цигель, цигель ай лю-лю /
— Давай разберем, то, что сделано.
— Вариант первый (пробный) для выяснения принципа работы программы.
1 | # -*- coding: utf-8 -*-
2 | import random
3 |
4 | def gen_number():
5 | . . prime_number =(1, 2, 3, 5, 7, 11, 13, 17)
6 | . . sign_number =(0, 1, 2, 3)
7 | . . nu = random.choice(prime_number)
8 | . . sign = random.choice(sign_number)
9 | . . if sign == 0:
10 | . . . . nu = nu * -1
11 | . . return nu
12 |
13 | def show_numb(a):
14 | . . if a > 0:
15 | . . . . return ' + '+ str(a)
16 | . . return ' - ' + str(abs(a))
17 |
18 | for i in range(100):
19 | . . x1 = gen_number()
20 | . . x2 = gen_number()
21 | . . b = x1 + x2
22 | . . c = x1 * x2
23 | . . #print 'x1 = '+str(x1) + ' x2 = '+str(x2)
24 | . . if b != 0:
25 | . . . . print 'x^2 '+ show_numb(b*-1) + 'x ' +show_numb(c)
Строка 2 — подключаем библиотеку для работы со случайными числами.
Строка 4 — функция генерирующая случайное число со случайным знаком
Строка 5 — кортеж из простых чисел, из которых случайно мы будем выбирать ___
Строка 6 — из этого кортежа будем выбирать знак. Минус будет засчитываться только если выпадет 0 (ясно все остальные вероятности = плюс) чем больше этих «ненужных» чисел, тем меньше вероятность выпадания минуса. Вот такая шутка.
Остальные строки функции прозрачны. Не будем сотрясать воздух.
Строка 13 — функция Показа числа. В общем все понятно: если число положительно то перед ним напишем «+», иначе «-».
= А если будет ноль?
— Посмотри внимательно.... нуля не будет.
/ Только нэ суетись! Кутузов!! /
Строка 18 — основной блок программы. В данном случае это цикл повторяющийся 100 раз
Задумываются два числа (из простых чисел с произвольным знаком)
Эти числа умножаются и складываются. Результат выводится на экран.
Строка 24 — исключает из рассмотрения случаи с коэффициентом b равным нулю, уравнение при этом будет слишком примитивно.
= Ты пропустил 23 строку!
— Она закомментирована и нужна была только в отладке для проверки результатов.
— Как видишь, ничего сложного.
= Ну, не знаю, но я...
/ Как говорит наш дорогой шеф, в нашем деле главное — этот самый реализьм! /
— Хорошо, переходим к реальной программе.
1 | # -*- coding: utf-8 -*-
2 | import random
3 |
4 | def gen_number(k):
5 | . . prime_number =(1, 2, 3, 5, 7, 11, 13, 17)
6 | . . sign_number =(0, 1, 2, 3)
7 | . . nu = prime_number[random.randint(0, k)]
8 | . . sign = random.choice(sign_number)
9 | . . if sign == 0:
10 | . . . . nu = nu * -1
11 | . . return nu
12 |
13 | def show_numb(a):
14 | . . if a > 0:
15 | . . . . return ' + '+ str(a)
16 | . . return ' - ' + str(abs(a))
17 | . .
18 | TopList = ['', '
19 |
20 | f1 = open("quadratic.htm", 'w')
21 | f2 = open("answer.htm", 'w')
22 |
23 | for ind in TopList:
24 | . . f1.write(ind + '\n')
25 | for ind in TopList:
26 | . . f2.write(ind + '\n')
27 |
28 | f1.write('
') 44 | . . . . f1.write(str(count) + ') x2 '+ show_numb(b*-1) + 'x ' +show_numb(c) + ' = 0' ) 45 | . . . . f1.write(' | \n')
') 47 | . . . . f2.write(str(count) + ') x1 = '+ str(x1) + '; x2 = ' + str(x2) ) 48 | . . . . f2.write(' | \n')
57 | f2.write('')
58 | f2.close()
59 | f1.write('
60 | f1.write('