Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос об арифметике по модулю 
:(
    Опции темы
eXtremal7
Дата 16.1.2014, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 30.8.2009

Репутация: нет
Всего: нет



Анализируя код, который содержит оптимизации расчёта обратных по модулю чисел для массива (т.е. дано число a и массив модулей [M1..Mn], надо для каждой пары найти [(a,M1), ..., (a,Mn)] обратное по модулю число invert(a, M)), увидел, что в коде используется следующее равенство:

(a mod x*y*z) mod x = a mod x

может кто-нибудь объяснить почему оно работает? smile Понятно, что (a mod x) mod x = a mod x, а вот с произведением не совсем ясно. Числа x,y,z если что, простые.
PM MAIL   Вверх
Akina
Дата 17.1.2014, 07:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



Упростим до (a mod x*y) mod x = a mod x. Допустим, (a mod x*y) mod x = М, само собой M < x. Пусть a = R*(x*y) + S, где S < x*y. Тогда (a mod x*y) mod x = ((R*(x*y) + S) mod x*y) mod x = S mod X = M. Следовательно, S = K*x + M. Тогда a = R*(x*y) + S = R*(x*y) + K*x + M. И, наконец, a mod x = (R*(x*y) + K*x + M) mod x = M mod x = M = (a mod x*y) mod x.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
ksnk
Дата 17.1.2014, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 7
Всего: 386



Вот, на пальцах, еще одна цепочка рассуждений.
 Рассмотрим выражение z mod x. Если добавить к z число, кратное x то результат операции не изменится.  a-(a mod x*y) кратно x, что, в общем-то, очевидно, так как оно будет кратно x*y


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
eXtremal7
Дата 17.1.2014, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 30.8.2009

Репутация: нет
Всего: нет



Akinaksnk
Спасибо, разобрался! smile

Вот как сам понимаю:
если (a mod xy = 0), то (a mod x = 0) и (a mod y = 0) (если а делится на произведение без остатка, то на каждое число тоже будет делиться без остатка).

(a - a mod xy) mod xy = 0   ->   (a - a mod xy) mod x = 0

Как уже было сказано, к делимому можно добавлять/вычитать число, кратное делителю, результат не изменится, т.е. a mod x = (a + Nx) mod x. Вот тогда и вычтем:

(a - (a - a mod xy)) mod x = a mod x
(a - a + a mod xy) mod x = a mod x
(a mod xy) mod x = a mod x, что и требовалось доказать! smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0633 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.