• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о проекте, чтобы узнать больше. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Диофантово уравнение

  • Автор темы Автор темы Natali*
  • Дата начала Дата начала

Natali*

Ученик
Регистрация
23 Дек 2011
Сообщения
3
Реакции
0
Баллы
0
Диофантово уравнение

Помогите пожалуйста с задачей на паскале!

Дано уравнение ах+by=c. Сколько различных пар целых чисел х и у удовлетворяют заданному уравнению? Если бесконечно много - выведите -1. (Это частный случай диофантова уравнения).

Вот нашла кое-что на Си ... а паскале как это будет даже представления не имею. :tehnari_ru_117::tehnari_ru_117::tehnari_ru_117:
Код:
int
        a, b, c, g, // коэффициенты диофантова уравнения, и g=gcd(a,b)
        x0, y0, // одно из решений диофантова уравнения
        x1, x2, // заданный отрезок
        mx, my; // искомое решение с наименьшим x >= x1
int cnt = (x1 - x0) / (b / g);
if (x0 + cnt * (b / g) < x1)
        ++cnt;
mx = x0 + cnt * (b / g);
my = y0 - cnt * (a / g);
 
Прежде всего, призываю с уважением относиться к одному из величайших математиков в истории человечества - Диофанту Александрийскому, и писать названный в его честь класс уравнений правильно: диофантовы (а не "диафантовы" и не "дифантовы") уравнения. Право, он заслужил этот небольшой знак уважения от далёких потомков.
Теперь по самой задаче.
На самом деле там всё просто.
Обратите внимание - Вас не просят искать сами решения, а просят лишь ответить на вопрос, сколько их. А таких ответов, как утверждает математика, может быть всего два: или 0, или ∞. И определяется это вот чем:
Найдём наибольший общий делитель чисел a и b. Обозначим его gcd. Так вот, если число c делится нацело без остатка на gcd, то решений бесконечно много, а если не делится - то решений нет. Так и построим программу:
Код:
VAR
 a,b,c,r:LongInt;

Function Gcd(g1,g2:LongInt):LongInt;
{Search for the Greatest Common Divisor}
var m,gc:LongInt;
begin
 If g2>g1 then
  begin
   m:=g1;
   g1:=g2;
   g2:=m;
  end;
 gc:=g2+1;
 Repeat
  Dec(gc);
 Until ((g1 mod gc)=0) and ((g2 mod gc)=0);
 Gcd:=gc;
end;

BEGIN
 Write('a= ');
 Readln(a);
 Write('b= ');
 Readln(b);
 Write('c= ');
 Readln(c);
 If (c mod Gcd(a,b))=0 then r:=-1 else r:=0;
 Writeln('Result: ',r);
 Readln;
END.
 
Мне очень стыдно! Ссори!

Подскажите пожалуйста, как сделать эту задачу через файлы, чтобы а,b,с я могла вводить из входящего файла, а ответ выходило в выходящем файле? Плиииз, очень срочно надо....
 
Мне очень стыдно! Ссори!

Подскажите пожалуйста, как сделать эту задачу через файлы, чтобы а,b,с я могла вводить из входящего файла, а ответ выходило в выходящем файле? Плиииз, очень срочно надо....
Да пожалуйста (имена файлов и их расположение можете, конечно, поменять):
Код:
VAR
 a,b,c,r:LongInt;
 f:Text;

Function Gcd(g1,g2:LongInt):LongInt;
{Search for the Greatest Common Divisor}
var m,gc:LongInt;
begin
 If g2>g1 then
  begin
   m:=g1;
   g1:=g2;
   g2:=m;
  end;
 gc:=g2+1;
 Repeat
  Dec(gc);
 Until ((g1 mod gc)=0) and ((g2 mod gc)=0);
 Gcd:=gc;
end;

BEGIN
 Assign(f,'D:\Inp.txt');
 Reset(f);
 Read(f,a,b,c);
 Close(f);
 Assign(f,'D:\Outp.txt');
 Rewrite(f);
 If (c mod Gcd(a,b))=0 then r:=-1 else r:=0;
 Write(f,r);
 Close(f);
END.
 
Назад
Сверху