Задача: для целых значений I, J, K, L найдите N первых четверок чисел, чтобы выполнялось равенство: i^3-j^3=(k^2+l^2)^2 - C (СИ)
Формулировка задачи:
Никак не могу решить, потому что не подступиться к задаче. Программу вполне по силам написать, да только не представляю, с чего начинать решение. Искать сами числа вполне допустимо с нуля, потому что дан весь диапазон int. По идее вывод программы должен выглядеть как-то так:
N=30
1. I=1 J=2 K=3 L=4
2. I=5 J=6 K=7 L=8
...
Решение задачи: «Задача: для целых значений I, J, K, L найдите N первых четверок чисел, чтобы выполнялось равенство: i^3-j^3=(k^2+l^2)^2»
textual
Листинг программы
n = 0;
for(I=0; ; I++) {
for(J=0; J<=I; J++) {
rk = I*I*I - J*J*J;
for(K=0; K*K <=rk; K++) {
for(L=K; L*L <= rk -K*K; L++) {
// Проверка
// В случае успеха n++
// Если L!=K еще раз n++
// Если n >=N выход из всех циклов
Объяснение кода листинга программы
В данном коде:
- Переменная
nинициализируется нулем и используется для подсчета количества найденных чететок чисел. - В цикле
forперебираются все возможные значенияI. - В каждой итерации цикла
forперебираются все возможные значенияJот 0 доI. - Вычисляется значение выражения
i^3-j^3=(k^2+l^2)^2. - В цикле
forперебираются все возможные значенияKот 0 доsqrt(rk). - Для каждого значения
Kв циклеforперебираются все возможные значенияLотKдоsqrt(rk-K*K). - Проверяется условие, если оно выполняется, то увеличивается значение
nна единицу. - Если
Lне равноK, то значениеnувеличивается еще на единицу. - Если
nбольше или равноN, то все циклы выходят.