Zadanie polega na znalezieniu nietrywialnego czynnika liczby złożonej.
Napisz kod, który znajdzie niebanalny czynnik liczby złożonej tak szybko, jak to możliwe, pod warunkiem, że Twój kod nie będzie miał więcej niż 140 bajtów. Wynik powinien być po prostu czynnikiem, który znalazłeś.
Twój kod może pobierać dane wejściowe i generować dane w dowolny dogodny sposób, na przykład jako argumenty funkcji.
Przypadki testowe, które wymieniają wszystkie czynniki (wystarczy tylko jeden wynik)
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
Nie uzyskam odpowiedzi na następujący trudny przypadek testowy, który może być interesujący w testowaniu:
513231721363284898797712130584280850383: 40206835204840513073 12764787846358441471
Wynik
Twój wynik to łączny czas na uwzględnienie wszystkich powyższych przypadków testowych z karą 10 minut za każdą nieudaną faktoryzację (wszystkie zaokrąglone do najbliższej sekundy). Twój kod powinien działać również dla innych liczb całkowitych, co nie powinno po prostu kodować tych odpowiedzi.
Zatrzymam twój kod po 10 minutach.
Jeśli dwie osoby otrzymają ten sam wynik, pierwsza odpowiedź wygrywa.
Ograniczenia
W kodzie nie można używać żadnej funkcji wbudowanej ani funkcji biblioteki, która dokonuje podziału na liczby całkowite. Możesz założyć, że wejście zajmuje mniej niż 256 bitów. Wszystkie liczby wejściowe będą złożone.
Jak będę miał czas?
Będę dosłownie uruchamiał się time ./myprog
na moim systemie Ubuntu, aby wykonać pomiar czasu, więc proszę również dostarczyć mi pełny program do uruchomienia, który zawiera dowolną zdefiniowaną przez ciebie funkcję.
Uwaga dotycząca języków skompilowanych
Czas kompilacji nie może zająć więcej niż 1 minutę na moim komputerze.
Czy to rzeczywiście możliwe?
Jeśli zignorujesz ograniczenia miejsca, każde z nich może zostać rozłożone na mniej niż 2 sekundy na moim komputerze przy użyciu czystego kodu Pythona + pypy.
Czym jest nietrywialny algorytm faktoringowy?
Algorytm Rho Pollarda jest szybki i nadaje się do gry w golfa. Oczywiście istnieje wiele innych sposobów na uwzględnienie liczby całkowitej .
Jeszcze szybsze jest sito Quadratic . Wyciśnięcie tego na 140 bajtów wygląda na poważne wyzwanie.
Wiodące wyniki
- SEJPM , 10 minut kary za ostatni przypadek testowy + 16 sekund w Haskell
2
czy 2, 2
?
2 ** 1024
?