Учебник 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).