Модуль (пробел) остаток (запятая) Модуль (пробел) остаток и т.д. |
|
Полученное число |
Одна древняя китайская задача гласила:
"Найти число, которое при делении на 3 дает остаток 2, при делении на 5 дает остаток 3, а при делении на 7 дает остаток 2"
Что бы решать подобные задачи, сделаем следущее
Исходное число по исходным данным можно выразить вот так
Где k - целые числа
Выпишем ряды меняя k от 0 по возрастающей
Несложно заметить что 23, встречается во всех трех рядах.
Это и есть наш ответ, следущее число (128) встретится только через 105=3*5*7 отсчетов. Так как эти числа взаимно простые, то и берем просто их произведение.
И таким образом общий ответ нашей задачи имеет вид
Легкий алгоритм для понимания, не правда ли?
Но он не совсем неудобен, когда встречаются большие числа, и опять же, при составлении элементов ряда можно банально ошибиться.
Есть другой способ
Пусть нам дана система сравнений
где - положительные, попарно взаимно простые целые числа.
Пусть - корни вспомогательных сравнений вида
Такие уравнения мы уже можем решать Сравнения 1 степени. Теория чисел.
Узнав эти корни, мы можем вычислить наше исходное число по формуле
Для нашего примера исходные данные выглядят так
Тогда система сравнений будет иметь вид
Решая их получим
И наше решение имеет вид
Или то же самое что и
Как видите, ответ совпадает.
Наш бот решает подобные задачи используя библиотеку PHP GMP. Поэтому к точности расчетов и ограничений на длину значений, это к ним :)
Хотя есть и свои материалы в частности: Расчет значения функции Эйлера, Остаток числа в степени по модулю и Диофантовое уравнение с тремя неизвестными
Важно: Логично и это надо учитывать при ввводе чисел, в паре чисел (модуль- остаток), модуль (всегда!) больше чем остаток.
Второе важное замечание. Модуль всегда(!) положительное число, остаток, может быть отрицательным, но лучше все таки привести его к положительному числу.
Как это сделать? Все ссылки на сопутствующие материалы уже приведены.
Пример
Узнать какое загадано число, если остаток при делении его на 37 равно 11, при делении на 9 равно 4, при делении на 7 равно 1, а при делении на 100 остаток равен 25.
Заметим, что модули, то есть числа (37, 9, 7, 100) на которые мы делим неизвестное число, попарно взаимно простые. То есть у нас нет ни одной пары из этих чисел, так что бы они имели общий делитель.
Раз так, то мы можем решать подобную задачу тем, методом который описан выше.Вводим в поле ввода
37 11, 9 4, 7 1, 100 25
За мгновение получим ответ
Полученное число |
|