Колесна факторизація
Колесна факторизація[усталений термін?] — це вдосконалення методу пробного поділу для цілочислової факторизації. Метод пробного ділення складається з ділення числа, яке слід послідовно розділити на перші цілі числа (2, 3, 4, 5,…) до знаходження дільника. Колісна факторизація починається з невеликого списку чисел, що має назву основа перших кількох простих чисел; після чого генерується список, що називається колесом, цілих чисел, які є взаємно простими числами з усіма числами основи. Щоб знайти найменший дільник числа, що підлягає факторизації, слід ділити його(число) послідовно на числа основи та на числа самого колеса. На основі {2, 3} цей метод зменшує кількість операцій ділення до 1/3 від кількості, необхідної для пробного поділу. Більші основи ще більше зменшують цю пропорцію; наприклад, за основою {2, 3, 5} до 8/30; і з основою {2, 3, 5, 7} до 48/210. Типовий прикладЗ огляду на основу перших кількох простих чисел {2, 3, 5}, «перший оберт» колеса буде містити числа:
Другий оберт можна отримати шляхом додавання 30, добутку чисел основи, до чисел на першому оберті. Третій оберт отримують шляхом додавання 30 до другого оберта тощо. Для реалізації методу можна зауважити, що приріст між двома послідовними елементами колеса, тобто
залишаються однаковими після кожного оберту. Пропонована нижче реалізація використовує допоміжну функцію div(n, k), яка перевіряє, чи n ділиться на k без остачі, і повертає true у цьому випадку, false в іншому випадку. У цій реалізації число, яке підлягає факторизації, дорівнює n, і програма повертає найменший дільник n. тест: = хибний якщо div ( n, 2) = true, то поверніть 2; якщо div ( n, 3) = true, то поверніть 3; якщо div ( n, 5) = true, то поверніть 5; к : = 7; i : = 1 а тест = хибний і k * k ≤ n робити тест : = div ( n, k ) якщо тест = вірно, поверніть k к : = k + inc [ i ] якщо i <8, то i : = i + 1 інший i : = 1 повернути n. Щоб отримати повну факторизацію цілого числа, обчислення можна продовжити без перезавантаження колеса на початку. Це призводить до наступної програми для повної факторизації, де функція add додає свій перший аргумент в кінці другого аргументу, що має бути списком. чинників : = []; while div ( n, 2) = true тоді чинники: = додати (2, фактори); н : = п / 2; while div ( n, 3) = true тоді фактори: = додати (3, фактори); н : = п / 3; while div ( n, 5) = true тоді чинники: = додати (5, фактори); н : = п / 5; к : = 7; i : = 1 а k * k ≤ n робити якщо div ( n, k ) = true тоді додати ( k, фактори) н : = п / к ще к : = k + inc [ i ] якщо i <8, то i : = i + 1 інший i : = 1 повернути додавання ( n, факторів) Ще одна презентаціяКолесна факторизація використовується для генерування списків переважно простих чисел із простої математичної формули та значно меншого списку перших простих чисел. Ці списки можуть бути використані в пробному відділенні або ситах. Оскільки не всі числа в цих списках є простими, це вводить неефективні зайві операції. Однак самим генераторам потрібно дуже мало пам'яті в порівнянні з тим, щоб зберігати чистий список простих чисел. Невеликий список початкових простих чисел складають цілісні параметри алгоритму для генерації залишку списку. Ці генератори називають колесами. Незважаючи на те, що кожне колесо може генерувати нескінченний перелік чисел, в певний момент числа перестають бути переважно простими. Спосіб може додатково застосовуватися рекурсивно як сіткове колесо основного числа для отримання більш точних коліс. Пол Прітчард[1][2][3][4] провів сформування ряду різних алгоритмів багато остаточної роботи щодо факторизації коліс, сит, що використовують колісну факторизацію, і колісне сито. Щоб візуалізувати використання колеса факторизації, можна почати з написання натуральних чисел навколо кіл, як показано на сусідній діаграмі. Кількість спиць вибирається такою, що прості числа будуть накопичуватися в меншості спиць. Зразок графічної процедури
Приклад1. Визначаються перші два прості числа: 2 і 3. 2. n = 2 × 3 = 6 3. 1 2 3 4 5 6 4. Викреслюються числа, що діляться на числа основи: 4 і 6: 1 2 3 5. х = 1. xn + 1 = 1 · 6 + 1 = 7. (x + 1) n = (1 + 1) · 6 = 12. Записуються числа від 7 до 12 починаючи з 7: 1 2 3 6. х = 2. xn + 1 = 2 · 6 + 1 = 13. (x + 1) n = (2 + 1) · 6 = 18. Виписуються числа від 13 до18 та повторюються наступні рядки: 1 2 3 7 і 8. Просіювання:
9. Просіювання
10. Отриманий список містить непросте число 25, яке є повним квадратом числа 5. Необхідно використати інші методи, такі як сито, щоб позбутися нього в остаточному списку 2 3 5 7 11 13 17 19 23 29 Зауважимо, що, використовуючи точно наступне просте число з 5 циклів коліс та виключаючи кращі (і) цього простих (і тільки цього простих) із отриманого списку, ми отримали базове колесо, як на кроці 4, для колеса факторизації з базою простих чисел 2, 3 і 5; це одне колесо до попереднього 2/3 колеса факторизації. Потім можна виконати кроки до кроку 10, використовуючи наступний простір 7 циклів і виключивши лише кратні 7 із результуючого списку на етапі 10 (залишаючи в цьому випадку деякі «відносні» прості числа та всі послідовні випадки — тобто деякі не відповідають дійсності повністю кваліфікований прості), щоб отримати наступне подальше вдосконалене колесо, рекурсивно повторюючи кроки в міру необхідності для отримання послідовно більших коліс. Аналіз та комп'ютерна реалізаціяФормально метод використовує наступні припущення: по-перше, набір базових простих чисел, об'єднаних з його (нескінченним) набором копійм, є надмножиною простих чисел; по-друге, нескінченний набір копрімесів можна легко перерахувати від копій до базового набору між 2 та базовим набором добутку. (Зверніть увагу, що 1 вимагає спеціального поводження.) Як видно з наведеного вище прикладу, результатом повторних застосувань вищевказаної рекурсивної процедури від кроків 4 до 10 може бути список коліс, який охоплює будь-який бажаний діапазон просіювання (до якого він може бути усічений), а отриманий список потім включає лише кратні простих чисел, що перевищує останні минулі базові прайми. Зауважте, що коли колесо проходить бажану верхню межу діапазону просіювання, можна зупинити генерування подальших коліс і використовувати інформацію на цьому колесі для скидання решти складених номерів із цього останнього списку коліс, використовуючи техніку типу «Сито Ератостена», але використовуючи проміжок візерунок, притаманний колесо, щоб уникнути зайвих скибочок; деякі оптимізації можуть бути здійснені виходячи з того, що (буде доведено в наступному розділі), що не буде повторного відсікання будь-якого складеного числа: кожен залишився композит буде викреслений рівно один раз. Крім того, можна продовжувати генерувати усічені списки коліс, використовуючи праймери до квадратного кореня потрібного діапазону сит, і в цьому випадку всі решти представлених чисел у колесі будуть простими; однак, хоча цей метод настільки ефективний, що ніколи не відкидати складені числа більше одного разу, він втрачає багато часу поза звичайно розглянутими операціями відсікання при обробці послідовних зачисток колеса, щоб зайняти набагато більше часу. Усунення складених чисел за допомогою колеса факторизації засноване на наступному: З огляду на число k> n, ми знаємо, що k не є простим, якщо k mod n і n не є відносно простими. З цього можна визначити частку чисел, яку усуває ситове колесо (хоча не всі потрібно фізично вражати; багато хто може автоматично сбиватися при операціях копіювання менших коліс на більші колеса) як 1 — phi (n) / n, що також є ефективністю сита. Відомо, що де γ — константа Ейлера. Таким чином, phi (n) / n повільно йде до нуля, оскільки n збільшується до нескінченності, і видно, що ця ефективність дуже повільно підвищується до 100 % для нескінченно великого n. З властивостей phi легко видно, що найефективніше сито менше x — це те, де і (тобто генерація колеса може зупинитися, коли пройде останнє колесо або має достатню окружність, щоб включити найбільшу кількість в діапазон просіювання). Щоб максимально використати на комп'ютері, ми хочемо, щоб числа були меншими за n і відносно простими для нього у вигляді набору. Використовуючи декілька спостережень, безліч можна легко створити :
Див. такожСписок літератури
Посилання
|