Виклик
Знайдіть найменшу кришку баз (наприклад, модулів), набори квадратичних залишків яких можна перевірити за допомогою табличного пошуку, щоб остаточно визначити, чи є дане невід’ємне ціле число n ідеальним квадратом. Усі основи повинні бути меншими або рівними квадратному кореню максимального значення n .
Відповідь з найменшим набором підстав для даної категорії n виграє виклик. (Це означає, що потенційно може бути більше одного переможця.) Категоріями n є:
Category Maximum allowed n Maximum allowed modulus/base
------------- -------------------- ----------------------------
8-bit values 255 15
16-bit values 65535 255
32-bit values 4294967295 65535
64-bit values 18446744073709551615 4294967295
У випадку, якщо краватка з двома множинами має рівну кардинальність, краватка перейде до безлічі, що має більшу здатність виявляти неквадрати раніше в послідовності.
У випадку, якщо не знайдеться повних обкладинок (що цілком вірогідно для 32-розрядної та 64-розрядної категорій), переможцем буде набір баз, які статистично чи доказово виключають найвищий відсоток неквадратів (без помилки звітування квадратів як неквадрати). Дивіться нижче для обговорення неповних обкладинок.
Фон
У багатьох додатках теорії чисел виникає питання, чи є якесь число n досконалим квадратом (0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100 тощо). Один із способів перевірити, чи n є квадратним, - це перевірити, чи поверхня (√n) ² = n, тобто чи округлий квадратний корінь з n у квадратній формі повертає n . Наприклад, підлога (√123) ² = 11² = 121, що не 123, тому 123 не є квадратним; але підлога (√121) ² = 11² = 121, тому 121 - квадрат. Цей метод добре працює в невеликих кількостях, особливо коли доступна апаратна операція квадратного корінця. Але для великої кількості (сотні чи тисячі біт) це може бути дуже повільним.
Інший спосіб перевірити на квадратність - виключити неквадрати, використовуючи квадратичні таблиці залишків. Наприклад, усі квадрати в базі 10 повинні мати остаточну цифру (one-place), яка дорівнює 0, 1, 4, 5, 6 або 9. Ці значення утворюють набір квадратичного залишку для бази 10. Отже, якщо база -10 число закінчується на 0, 1, 4, 5, 6 або 9, ви знаєте, що воно може бути квадратним, і потрібно буде додаткове обстеження. Але якщо число базового 10 закінчується на 2, 3, 7 або 8, то ви можете бути впевнені, що воно не є квадратним.
Тож давайте подивимось на іншу базу. Усі квадрати в базі 8 повинні закінчуватися на 0, 1 або 4, що за зручністю становить лише 3 з 8 можливостей, тобто 37,5% шансу випадкового числа можливо квадратного, або 62,5% шансу випадкового числа точно не бути квадратним. Це набагато кращі шанси, ніж те, що дає база 10. (І зауважте, що операція з модулем base-8 - це просто логічна операція, на відміну від модуля base-10, що є поділом на 10 із залишком.)
Чи є ще кращі бази? Ну так, насправді. База 120 має 18 можливостей (0, 1, 4, 9, 16, 24, 25, 36, 40, 49, 60, 64, 76, 81, 84, 96, 100 і 105), що становить лише 15% ймовірність бути квадратною. А база 240 ще краща, лише 24 можливості, що становить лише 10% шансу можливо бути квадратним.
Але жодна окрема база не може остаточно визначити квадратність (якщо тільки вона не перевищує максимальну кількість, що тестується, що, очевидно, недоцільно). Одна база може виключити виключно квадратність; він не може остаточно перевірити прямоту. Тільки ретельно підібраний набір баз, працюючи разом, може остаточно перевірити квадратність у діапазоні цілих чисел.
Отже, виникає питання: Який набір баз утворює мінімальне покриття, яке разом дозволяє остаточне виведення квадратності чи неквадратності?
Приклад правильної, але не мінімальної обкладинки
Кришка 16-основної кришки {3, 4, 5, 7, 8, 9, 11, 13, 16, 17, 19, 23, 25, 29, 31, 37} достатня для остаточного визначення квадратності чи неквадратичності всі 16-бітні значення від 0 до 65535. Але це не мінімальне покриття, оскільки існує принаймні одна 15-базова кришка, яку також легко знайти. Насправді, ймовірно, є набагато менші обкладинки - можливо, з 6 та 7 базами.
Але для ілюстрації давайте подивимось на тестування вибіркового значення n за допомогою цього 16-базового набору кришки. Ось набори квадратичних залишків для вищевказаного набору баз:
Base m Quadratic residue table specific to base m
------ ----------------------------------------------------
3 {0,1}
4 {0,1}
5 {0,1,4}
7 {0,1,2,4}
8 {0,1,4}
9 {0,1,4,7}
11 {0,1,3,4,5,9}
13 {0,1,3,4,9,10,12}
16 {0,1,4,9}
17 {0,1,2,4,8,9,13,15,16}
19 {0,1,4,5,6,7,9,11,16,17}
23 {0,1,2,3,4,6,8,9,12,13,16,18}
25 {0,1,4,6,9,11,14,16,19,21,24}
29 {0,1,4,5,6,7,9,13,16,20,22,23,24,25,28}
31 {0,1,2,4,5,7,8,9,10,14,16,18,19,20,25,28}
37 {0,1,3,4,7,9,10,11,12,16,21,25,26,27,28,30,33,34,36}
Тепер перевіримо число n = 50401 за допомогою цього набору баз, перетворивши його в кожну базу. (Це не найефективніший спосіб обстеження залишків, але його достатньо для пояснювальних цілей.) Нас тут цікавить 1 місце (позначене нижче в дужках):
Base "Digits" in base m
m m^9 m^8 m^7 m^6 m^5 m^4 m^3 m^2 m^1 ( m^0 )
---- -----------------------------------------------------------------
3 2 1 2 0 0 1 0 2 0 ( 1 ) ✓
4 3 0 1 0 3 2 0 ( 1 ) ✓
5 3 1 0 3 1 0 ( 1 ) ✓
7 2 6 6 6 4 ( 1 ) ✓
8 1 4 2 3 4 ( 1 ) ✓
9 7 6 1 2 ( 1 ) ✓
11 3 4 9 5 ( 10 )
13 1 9 12 3 ( 0 ) ✓
16 12 4 14 ( 1 ) ✓
17 10 4 6 ( 13 ) ✓
19 7 6 11 ( 13 )
23 4 3 6 ( 8 ) ✓
25 3 5 16 ( 1 ) ✓
29 2 1 26 ( 28 ) ✓
31 1 21 13 ( 26 )
37 36 30 ( 7 ) ✓
Отже, ми можемо бачити, що в 13 з цих підстав залишок відповідає відомому квадратичному залишку (в таблиці називаємо це "ударом"), а в 3 з цих підстав залишок не відповідає відомому квадратичному залишку (називаємо це a "міс"). Все, що потрібно, - це 1 промах, щоб знати, що число не є квадратним, тому ми можемо зупинитися на 11, але для ілюстративних цілей ми розглянули всі 16 підстав тут.
Приклад неповного обкладинки
Технічно неповна обкладинка не є обкладинкою, але це вже не в питанні. Набір баз {7, 8, 11, 15} майже охоплює всі 8-бітні значення n від 0 до 255 правильно, але не зовсім. Зокрема, він неправильно ідентифікує 60 і 240 як квадратні (це помилкові позитиви), але він ідентифікує всі фактичні квадрати (0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196 та 225) і не дає жодних помилкових позитивних результатів. Таким чином, це 4-х набір, який майже вдається як рішення, але в кінцевому підсумку не вдається, оскільки неповне покриття не є правильним рішенням.
Для 8-бітових n множина баз {7, 8, 11, 15} є одним з двох наборів з 4 баз, які створюють дві помилки, і є сім наборів з 4 баз, які створюють лише одну помилку. Фактично не існує наборів з 4 баз, які б формували повне та точне покриття 8-бітних значень. Чи можете ви знайти набір із 5 баз, які не створюють помилок, правильно покриваючи всі 8-бітні значення? Або вам потрібно 6 і більше? (Я знаю відповідь на 8-бітну n , але я не збираюсь її видавати. Я не знаю відповіді для 16-розрядних, 32-розрядних або 64-бітних, і я вірю навіть 16- випадок біт неможливо вирішити шляхом грубої сили пошуку. Для вирішення 32-бітних та 64-бітних випадків, безумовно, потрібні генетичні, евристичні та інші методи пошуку.
Коментар до криптографічно великої кількості
Крім 64-розрядних чисел - в сотнях чи тисячах двійкових цифр - саме тут швидка перевірка квадратності дійсно стає найбільш зручною, навіть якщо обкладинка неповна (що, безумовно, буде для дійсно великої кількості). Як такий тест може бути корисним, навіть якщо він недостатньо визначальний? Ну, уявіть, у вас був надзвичайно швидкий тест на квадратність, який працював коректно 99,9% часу і давав помилкові негативи решту 0,1% часу і ніколи не давав помилкових позитивних результатів. За допомогою такого тесту ви зможете визначити неквадратичність числа майже миттєво, і тоді у виняткових випадках нерішучості ви можете вдатися до більш повільного методу розв'язання невідомого іншим способом. Це дозволить заощадити зовсім небагато часу.
Наприклад, множина {8, 11, 13, 15} відповідає правильному 99,61% часу для 8-бітних значень n від 0 до 255, є правильним 95,98% часу для 16-бітних значень n від 0 до 65535, і є правильним 95,62% часу для 24-бітних значень n від 0 до 16777215. Оскільки n переходить до нескінченності, відсоток правильності для цього набору баз знижується, але він асимптотично наближається і ніколи не опускається нижче 95,5944% правильність.
Тож навіть цей дуже крихітний набір із 4 невеликих підстав корисний майже негайно визначити приблизно 22 з 23 довільно великих чисел як неквадрати, що усуває необхідність подальшого огляду цих чисел повільнішими методами. Тоді повільніші методи потрібно застосовувати лише в невеликому відсотку випадків, які не вдалося виключити цим швидким тестом.
Цікаво зауважити, що деякі 16-бітні бази самостійно досягають 95%. Насправді, кожна з нижчих підстав може викорінювати краще, ніж 97% усіх чисел до нескінченності, як не квадратних. Набір квадратичного залишку для кожної з цих баз може бути представлений у вигляді упакованого бітового масиву, використовуючи лише 8192 байти.
Ось 10 найпотужніших одиночних баз менше 2 ^ 16:
Rank Base Prime factorization Weeds out
---- ------------------------------ ---------
1. 65520 = 2^4 x 3^2 x 5 x 7 x 13 97.95%
2. 55440 = 2^4 x 3^2 x 5 x 7 x 11 97.92%
3. 50400 = 2^5 x 3^2 x 5^2 x 7 97.56%
4. 52416 = 2^6 x 3^2 x 7 x 13 97.44%
5. 61200 = 2^4 x 3^2 x 5^2 x 17 97.41%
6. 44352 = 2^6 x 3^2 x 7 x 11 97.40%
7. 63360 = 2^7 x 3^2 x 5 x 11 97.39%
8. 60480 = 2^6 x 3^3 x 5 x 7 97.38%
9. 63840 = 2^5 x 3 x 5 x 7 x 19 97.37%
10. 54720 = 2^6 x 3^2 x 5 x 19 97.37%
Бачите щось цікаве, що всі ці бази мають спільне? Немає підстав вважати, що вони можуть бути корисними в поєднанні разом (можливо, вони є, можливо, їх немає), але тут є кілька хороших підказок щодо того, які бази можуть бути найбільш впливовими для більших категорій чисел.
Бічний виклик: Один з найвпливовіших баз (якщо не більшість) до 2 ^ 28 є 245044800, яка одна може правильно сапати 99.67% Не квадрати, або близько 306 307 випадкових чисел , кинутих в нього. Ви можете знайти в найбільш впливову єдину базу менш ніж 2 ^ 32?
Пов'язані
У наступних питаннях є кілька дуже приємних ідей, які тісно пов'язані, а також декілька прийомів мікрооптимізації для швидшого виконання певних операцій. Хоча пов'язані запитання конкретно не ставлять для пошуку найсильнішого набору баз, ідея про міцні основи неявно є центральною частиною використовуваних там методів оптимізації.