Впервые слышу про двухпроходность. В книжке "Простое и сложное в программировании" приводится весьма изящная реализация расширенного алгоритма, без всяких обращений хода. Я сам им пользуюсь, когда руками считаю
Ааа, ясно, я как всегда узнал об этом последний
э-э-э... не помню слова:
совокупности.
Кстати, зря Вы к совокупности переходите - букоф лишних много. Если
, то Вы будете выписывать
систем сравнений. Оно Вам надо?
main.c, есть такая древняя книжка Бухштаб Теория чисел. Возьмите ее, там линейные сравнения и системы линейных сравнений очень подробно разобраны в общем виде.
2. Коэффициент при
и мод не взаимно просты.
Берем сравнение
. Ищем
(наведите мышкой на формулу, посмотрите, как она пишется). Полагаем
и тогда
(по определению сравнений). Так что все сводится к случаю
.
Снова рассмотрим сравнение
уже с
. Если теперь вдруг
, то
, т.е.
, что невозможно. Т.е. если вдруг
, но
, то решений нет.
1. Моды не взаимно просты
Если
, то для существования решений сравнений
необходимо (и при выполнении условий выше (т.е. если каждое сравнение по отдельности имеет решение) вроде достаточно), чтобы система
имела решение (а ту уравнения проверяем на линейную зависимость и все).
Еще раз: это все изложено в Буштабе простым языком на нескольких страницах.
-- Пн дек 03, 2012 07:17:04 --И вообще, какой критерий существования решений?
Наверное в случае системы с произвольным числом сравнений проверяем, что каждое сравнение имеет решение. Разлагаем модули на множители и проверяем сравнения и одинаковыми простыми в модулях на совместимость (хотя это немножко долго будет в случае больших чисел. В противном случае надо добавлять на каждом шаге одно сравнение, считать НОД-ы и проверять наличие решений и то...). Тут надо подумать немного (тем более, Вы же все в контексте алгоритма делаете). У вас произвольная система сравнений?