Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 23.12.2011, 14:36   #1 (permalink)
Natali*
Новичок
 
Регистрация: 23.12.2011
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
Question Диофантово уравнение

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

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

Вот нашла кое-что на Си ... а паскале как это будет даже представления не имею.
Код:
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);
Natali* вне форума   Ответить с цитированием

Старый 23.12.2011, 14:36
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Аналогичные проблемы уже обсуждались ранее

Решить дифференциальное уравнение в Паскале
C#. Квадратное уравнение

Старый 23.12.2011, 16:41   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Прежде всего, призываю с уважением относиться к одному из величайших математиков в истории человечества - Диофанту Александрийскому, и писать названный в его честь класс уравнений правильно: диофантовы (а не "диафантовы" и не "дифантовы") уравнения. Право, он заслужил этот небольшой знак уважения от далёких потомков.
Теперь по самой задаче.
На самом деле там всё просто.
Обратите внимание - Вас не просят искать сами решения, а просят лишь ответить на вопрос, сколько их. А таких ответов, как утверждает математика, может быть всего два: или 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.
Vladimir_S вне форума   Ответить с цитированием
Старый 23.12.2011, 23:17   #3 (permalink)
Natali*
Новичок
 
Регистрация: 23.12.2011
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Мне очень стыдно! Ссори!

Подскажите пожалуйста, как сделать эту задачу через файлы, чтобы а,b,с я могла вводить из входящего файла, а ответ выходило в выходящем файле? Плиииз, очень срочно надо....
Natali* вне форума   Ответить с цитированием
Старый 24.12.2011, 09:18   #4 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Natali* Посмотреть сообщение
Мне очень стыдно! Ссори!

Подскажите пожалуйста, как сделать эту задачу через файлы, чтобы а,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.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 19:14.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.