Завдання - знайти нетривіальний множник складеного числа.
Напишіть код, який знаходить нетривіальний коефіцієнт складеного числа якомога швидше, залежно від того, щоб ваш код був не більше 140 байт. Вихід повинен бути лише фактором, який ви знайшли.
Ваш код може приймати введення та давати вихід будь-яким зручним способом, включаючи, наприклад, аргументи функції.
Тестові приклади, в яких перераховані всі фактори (вам потрібно вивести лише один)
187: 11 17
1679: 23 73
14369648346682547857: 1500450271 9576890767
34747575467581863011: 3628273133 9576890767
52634041113150420921061348357: 2860486313 5463458053 3367900313
82312263010898855308580978867: 264575131106459 311111111111113
205255454905325730631914319249: 2860486313 71755440315342536873
1233457775854251160763811229216063007: 1110111110111 1000000000063 1111111999999
1751952685614616185916001760791655006749: 36413321723440003717 48112959837082048697
Я не буду оцінювати вашу відповідь на наступний складний тестовий випадок, який може зацікавити тестування:
513231721363284898797712130584280850383: 40206835204840513073 12764787846358441471
Оцінка
Ваш бал - це комбінований час для врахування всіх тестових випадків, зазначених вище, із штрафом 10 хвилин за кожну невдалу факторизацію (всі округлені до найближчої секунди). Ваш код повинен працювати і для інших цілих чисел, тобто не слід просто жорстко кодувати ці відповіді.
Я зупиню ваш код через 10 хвилин.
Якщо двоє людей отримують однаковий бал, то перша відповідь виграє.
Обмеження
Ваш код не може використовувати будь-яку вбудовану або бібліотечну функцію, яка виконує цілочисельну факторизацію. Можна припустити, що вхід займає менше 256 біт. Усі вхідні числа будуть складеними.
Як я встигну?
Я буду буквально запускатися time ./myprog
в моїй системі Ubuntu, щоб виконати терміни, тому, будь ласка, також поставте повну програму для мене для запуску, яка включає будь-яку функцію, яку ви визначили.
Примітка для складених мов
Час компіляції повинен займати не більше 1 хвилини на моїй машині.
Чи це насправді можливо?
Якщо ви ігноруєте обмеження у просторі, то кожне з них може бути враховано менше ніж за 2 секунди на моєму комп’ютері, використовуючи чистий код Python + pypy.
Отже, що таке нетривіальний алгоритм факторингу?
Алгоритм полі Полларда швидкий і підходить для гольфу. Звичайно, існує маса інших способів поділити ціле число .
Ще швидше сито квадратичне . Це здається серйозним завданням видавити це на 140 байт.
Ведучі партитури
- SEJPM , 10 хвилин штрафу за останній тестовий випадок + 16 секунд дюйма Haskell
2
чи 2, 2
?
2 ** 1024
?