КМ.72

Лена Бригарь
Лена Бригарь

Latest posts by Лена Бригарь (see all)

Задача из журнала «Квант» №72

Условие:
Пусть p — произвольное вещественное число. Найдите все такие x, что сумма кубических корней из чисел 1 – x и 1 + x равна p.

Тесты:

Входные данные Выходные данные
1 0.6 No solutions
2 1.4 x1 = -0.997217
x2 = 0.997217
3 2 x=0
4 1.79 x1 = -0.814516
x2 = 0.814516

Код

Решение:
Рассмотрев условие, приходим к такому уравнению [latex] \sqrt[3]{\left(1+x \right)}+\sqrt[3]{\left(1-x \right)}=p [/latex] , где p — параметр, который будет задаваться на входе.Ответы для р будут существовать на промежутке [latex] \left[\sqrt[3]{2}; 2\right] [/latex] . Если р не входит в промежуток, то выводим «нет решений». Если р=2, то оба корня совпадут, по этому выводим один «х=0». Для остальных случаев ответом будет два корня.

Ссылки:
Решение на ideone http://ideone.com/A8DXC9
Условие http://www.kvant.info/zkm_1971.htm
Решение wolfram http://www.wolframalpha.com/input/?i=(1%2Bx)%5E(1%2F3)+%2B+(1-x)%5E(1%2F3)+%3D+p

Ю3.20

Марченко Філіп Олександрович
Марченко Філіп Олександрович

Latest posts by Марченко Філіп Олександрович (see all)

Задача: Для заданных [latex]a[/latex] и [latex]p[/latex] вычислить [latex]x = \sqrt[p]{a}[/latex] по рекуррентному соотношению Ньютона: 

[latex]x_{n+1}=\frac{1}{p}*\left[(p-1)x_{n}+\frac{a}{x_{n}^{p-1}}\right][/latex]  [latex]x_{0} = a[/latex]

Сколько итераций надо выполнить, чтобы для достижения заданной погрешности [latex]\varepsilon[/latex] выполнялось соотношение:

[latex]\left|x_{n+1}-x_{n}\leq\varepsilon\right|[/latex]?

Тесты:

[latex]a[/latex] [latex]p[/latex] Значение корня [latex]x[/latex] Значение корня [latex]x[/latex], подсчитанного с помощью соотношения Количество итераций
57 5  2.24479 2.24479  18
16 2 4 4 5
230 2  15.1658  15.1658 7
9 3  2.08008 2.08008  7

Код на С++: 

Код на Java:

 

 

Решение: Для подсчёта значения корня с помощью рекуррентного соотношения, я создал цикл, в котором организовал подсчёт значения таким образом, что пока разница значения корня x, подсчитанного с помощью функции pow, cо значением текущего корня xn,  подсчитанным с помощью соотношения, больше заданной погрешности eps, то, записывая текущее значение в переменную x_prev, подсчитываю новое значение корня. В зависимости от заданной погрешности, программа считает результат и выводит его на экран вместе с кол-вом итераций.

UPD: По предложению Игоря Евгеньевича добавил быстрое возведение в целую степень.

Решение UPD: Чтобы построить алгоритм быстрого возведения в степень, необходимо рассмотреть две ситуации:

  1. Когда степень чётна;
  2. Когда степень не чётна;

Ситуация 1 : Проведя несложный анализ  можно заметить, что [latex]{a}^{p}[/latex] можно представить в виде

[latex](a^{\frac{p}{2}})^{2}[/latex].

Ситуация 2: В этой ситуации необходимо перейти в степень [latex]p-1[/latex], которая является чётной.

[latex]a^{p}=a^{p-1} * a[/latex]

И в результате получим алгоритм, который работает за [latex]O(\log n)[/latex].

 

Проверить правильность работы программы можно здесь (UPD):  http://ideone.com/VBLGKO

 

А136л

Сорокина Полина
Сорокина Полина

Latest posts by Сорокина Полина (see all)

Задача: Даны натуральное число [latex]n[/latex], действительные числа [latex]a_{1},\cdot \cdot \cdot ,a_{n}[/latex]. Вычислить: [latex]\sqrt{\left|a_{1}a_{2}\cdot \cdot \cdot a_{n} \right|}[/latex].

[latex]n[/latex] [latex]a_{1}[/latex] [latex]a_{2}[/latex] [latex]a_{3}[/latex] [latex]a_{4}[/latex] [latex]a_{5}[/latex] [latex]a_{6}[/latex] [latex]a_{7}[/latex] [latex]a_{8}[/latex] [latex]k[/latex]
4 -5 2 4 -3.6 12
8 -5 0.2 -3.2 0.5 -1.25 20 2 80 80
3 4 4 0 0
5 3 8 6 2.8 1.3 22.894541

С++:

Java:

Объявляем переменную [latex]n[/latex] (количество элементов — это целое число, поэтому используем тип int) и переменные a (элементы произведения), p (произведение), k (корень из модуля произведения элементов), они могут быть вещественными, поэтому выбираем тип double.

В цикле for считываются элементы [latex]a_{1},a_{2},\cdot \cdot \cdot ,a_{n}[/latex], где [latex]i[/latex] — индекс элемента, и вычисляется их произведение.

После цикла вычисляется корень из модуля произведений элементов.

Задача на Ideone:
C++
Java