Учебник Turbo Pascal. Введение - Решение нелинейного диофантова уравнения
ОГЛАВЛЕНИЕ
Решение нелинейного диофантова уравнения
Как я уже упоминал, решение нелинейных диофантовых уравнений — это более сложная проблема. Но компьютер и умелое применение методов вычислительной математики часто позволяют быстро получить решение даже самых сложных задач. Вот пример кубического диофантова уравнения:
x3 = у2 + 2;
Известно его решение: х = 3, у = 5. Усложним задачу и решим уравнение
x3 = у2 + 63;
Понятно, что по сравнению с первым диапазон поиска решений придется увеличить.
Листинг 1.6. Решение нелинейного диофантова уравнения
program diophantine_equation_2;
var
х, у, z, w, n: Longint;
begin
{Вначале найдем наибольшее n, для которого nA2 + 63 <= MaxLongint.
MaxLongint = 2 147 483 647 - встроенная константа модуля System.
задающая максимальное значение переменной типа Longlnt}
n := MaxLongint - 63;
n := Trunc(SqrtCn)); {Trunc(t) - целая часть величины t}
n := n - 8;
х := 0;
WriteLn('Bce целые решения уравнения х^3 = у*2 + 63.');
WriteLn('для 1 <= у <= ', n, ':');
for у := 1 to n do
begin
z := у * у + 63;
repeat
Inc(x); {Функция Inc(x) увеличивает значение х на единицу}
w := х * х * х;
until w >= z;
if w = z then
WriteLn('(x, у) = (', х, ', ', y, ')')
else
Dec(x); {Функция Dec(x) уменьшает значение х на единицу}
end;
Write('Работа закончена, нажните <Enter>');
ReadLn;
end.
Для того чтобы увеличить диапазон поиска решений уравнения, целые переменные программы х, у, z, w, n описаны как переменные типа LongInt («длинное целое»). Диапазон значений для типа «длинное целое» составляет [- 2 147 483 648, +2 147 483 647]. Здесь же используется и оператор цикла repeat...until.... И, наконец, в программе содержится обращение к встроенным функциям округления к нулю (Trunc), увеличения и уменьшения значения аргумента на единицу (Inc и Dec).