Алгоритм Барретта
У модульній арифметиці, алгоритм Барретта — це алгоритм знайдення лишку за модулем запропонований Барреттом у 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. ISBN 978-3-540-18047-0. doi:10.1007/3-540-47721-7_24.
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.