Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.12.26;
Скачать: [xml.tar.bz2];

Вниз

Как найти значение выражения   Найти похожие ветки 

 
Werewolf   (2003-12-12 10:38) [0]

Нужно найти остаток от деления числа X в степени Y на Z


 
Sandman25   (2003-12-12 10:43) [1]

power(x, y) mod z


 
Werewolfru   (2003-12-12 10:53) [2]

Ежу понятно, но у меня 474^343 mod 527


 
Romkin   (2003-12-12 10:59) [3]

Угу, а как насчет переполнения?
Ответ простой: перемножить модули и взять модуль результата.
Еще лучше - умножать постоянно на х и брать модуль, потом снова умножать... Пока не получится нужная степень.
Еще лучше минимизировать количество умножений %)
Стоит только покопаться, и находишь занятный алгоритм (мнемоника)
a^b mod n : ПУсть (b[k],b[k-1]..b[0]) - биты числа b, тогда

c := 0
d := 1
for i := k downto 0 do
begin
c := 2*c
d := (d*d) mod n
if b[i] = 1 then
begin
c := c + 1
d := (d * a) mod n
end
end
Result := d

А вот как работать с битами и тд - к Зотову :)


 
werewolfru   (2003-12-12 11:08) [4]

Щас попробую разобраться...


 
Romkin   (2003-12-12 11:19) [5]

Здесь просто последовательное возведение в степень и взятие модуля от промежуточного результата. Только водведение идет оптимальным способом, например, в степень 5 быстрее всего возвести, взяв дважды квадрат и домножив результат на основание степени, в девятую - в третью (квадрат и умножить) и результат в третью :)


 
Werewolfru   (2003-12-12 11:22) [6]

А разве оно не вылазит за пределы обычного Integer?


 
Romkin   (2003-12-12 11:31) [7]

Дык модули перемножаются здесь :)
Кстати, запутался я. Возведение в степень 11: 10 = 1011b, идем слева направо по битам, 1 - третья степень, 0 - квадрат. Следовательно, квадрат * основание (3 степень), снова квадрат (5), квадрат * основание (8) , квадрат * основание (11). 7 умножений, ессно, умножаются модули, и от результата тоже модуль берется.
А вот проход по степени справа налево (так удобнее) см. Кнут т.2 4.6.3


 
Werewolfru   (2003-12-12 11:33) [8]

Дык это оттудова? тогда завтра его посмотрю. Спасибо!


 
Romkin   (2003-12-12 11:40) [9]

Не совсем :) Там просто возведение в степень, но если добавить воды: (uv) mod m == (u mod m)(v mod m) mod m, то все получается (если не ошибаюсь)


 
Werewolfru   (2003-12-12 11:57) [10]

По твоему алгоритму a^b mod n всегда равно a. В чем-то глюк...



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2003.12.26;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.007 c
7-86577
Alex Konshin
2003-10-22 12:43
2003.12.26
IDE HDD serial number - новый пример


1-86397
koks
2003-12-11 12:29
2003.12.26
wsMiximized -> wsNormal


8-86458
BOA_KAA
2003-08-28 13:03
2003.12.26
PlaySound


1-86360
Stant
2003-12-11 23:42
2003.12.26
Как показать многострочный HINT


7-86563
mich@el
2003-10-23 11:11
2003.12.26
Мониторинг директории





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский