Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 23.12.2011, 12:57   #1
Katrina*
Пользователь
 
Регистрация: 19.12.2011
Сообщений: 29
Вопрос дифантовое уравнение

Помогите пожалуйста написать диофантовое уравнения вида ax+by=c, где нужно определить сколько различных пар целых чисел х и у удовлетворяет заданному уравнению?

вот нашла фрагмент в инете на Си...
Код:
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);
Katrina* вне форума
Старый 23.12.2011, 21:44   #2
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,310
По умолчанию

Я прошлый раз лапухнулся с отрицательными решениями
Но вот прочитал в Википедии, что решение будет тогда, когда
c делится нацело на наибольший общий делитель Nod(a,b).
Для поиска НОДа пишем функцию (тут и программа для проверки):
Код:
var m, n, k : integer;
   function NOD(a, b : integer): integer;
   var r : integer; {остаток}
   begin
      if b = 0 then
         NOD := a
      else begin
         r := a MOD b;
         a := b;
         b := r;
         NOD := NOD(a,b); {рекурсивный вызов}
      end;
   end;
  begin
     readln(m, n);
     k := NOD(m,n);
     writeln('  m    n    k');
     writeln(m:5,n:5,k:5);
  end.
Т.о. ищем Nod(a,b) и проверяем:
Код:
NodAB := Nod(a,b);
if ((c MOD NodAB) <> 0) AND NodAB <> 1 Then {Решений нет}
else {вывод -1};
Так думаю, что решения искать нет необходимости.
Ваш пример: 3 4 5. NOD(3,4) = 1. Решения есть.
Другой пример: 6 9 12 --> 2 3 4. Решения есть.
Но утверждается, что для 6 9 17 решения нет.

Пробуйте.
Как-то так, ...
ViktorR вне форума
Старый 23.12.2011, 22:07   #3
Katrina*
Пользователь
 
Регистрация: 19.12.2011
Сообщений: 29
По умолчанию

что-то я ничего не поняла, подскажите пожалуйста как изменить под данные условия:

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

Например,
входной файл
3 4 5
выходной файл
-1
Katrina* вне форума
Старый 23.12.2011, 22:48   #4
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,310
По умолчанию

А как следует из Википедии, если есть одно решение, то его можно принять как частное, например x0, y0.
Все остальные ищутся как
x = x0-(b/Nod(a,b)) * n
y = y0+(a/Nod(a,b)) * n,
где n - любое целое.
Т.о. если есть решение, то их бесконечно много, а если нет, то и все.
В этом легко убедиться если общее решение подставить в исходное уравнение.
Т.е. достаточно вывести только два ответа, либо решений нет, либо - -1.

Как то так, ...
Как-то так, ...

Последний раз редактировалось ViktorR; 23.12.2011 в 22:51.
ViktorR вне форума
Старый 24.12.2011, 21:01   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию



Katrina*

Вы, наверное, НЕ ПОНИМАЕТЕ, что такое кросспостинг!

Кросспостинг - создание одинаковых тем.
И это строго запрещёно правилами форума.


Модератор.


p.s. вы прямо напрашиваетесь на бан!
Serge_Bliznykov вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Уравнение на Си hetolon Общие вопросы C/C++ 0 21.10.2011 23:10
Уравнение Artemini Помощь студентам 3 21.10.2011 14:19
Уравнение Alexsandr Visual C++ 1 14.10.2011 11:03
уравнение Poma][a Паскаль, Turbo Pascal, PascalABC.NET 4 13.10.2011 20:30
уравнение Екатерина Воробей Паскаль, Turbo Pascal, PascalABC.NET 2 03.10.2011 18:42