У модульній арифметиці, зведення Барретта — це алгоритм знайдення лишку за модулем запропонований Барреттом у 1986.[1] Наївний спосіб обчислення
полягає у використанні швидкого алгоритму ділення. Зведення Барретта є алгоритмом спроектованим для оптимізації цієї операції за умов сталості і заміняючи ділення на множеннями.
Алгоритм
Попередні обчислення:
Нехай і це не степінь 2. (Це необхідно для наступного доведення і, тому що ділення за модулем, що дорівнює степені 2 є тривіальним.)
Обрати таке, що (Найменше таке дорівнює )
Обчислимо (Це є наш наперед обчислений множник.)
Зведення:
Маємо таке, що залишок від ділення на якого нам потрібно знайти.
Обчислюємо
Якщо тоді повернути інакше . Цей результат дорівнює
Доведення правильності
Оскільки не є степенем 2, то ми знаємо, що не ціле. Отже,
Множення на
Ділення на
З того, що випливає, що Тому:
Також: і Разом маємо:
Множимо на
Множимо на
Додаємо
Очевидно, що оскільки це число кратне
Тут ми отримали результат зведення з діапазону до в діапазоні без зміни конгруентності за модулем Останній крок простий, необхідно отримати результат в діапазоні
Примітки
↑Barrett, P. (2006). Implementing the Rivest Shamir and Adleman Public Key Encryption Algorithm on a Standard Digital Signal Processor. Advances in Cryptology — CRYPTO' 86. Lecture Notes in Computer Science. Т. 263. с. 311—323. doi:10.1007/3-540-47721-7_24. ISBN978-3-540-18047-0.