Ze wszystkich lat, w których podejmowałem to wyzwanie, rok 2017 jest pierwszym rokiem, który był liczbą pierwszą. Pytanie dotyczy więc liczb pierwszych i ich właściwości.
Twoim zadaniem jest stworzenie programu lub funkcji, która weźmie dowolną dużą liczbę całkowitą dodatnią jako dane wejściowe i wyprowadzi lub zwróci, niezależnie od tego, czy liczba ma wartość 2,017 - to znaczy, czy największy czynnik pierwszy w tej liczbie wynosi 2,017 lub mniej.
Niektóre przykładowe dane wejściowe i ich wyniki:
1 (has no prime factors)
true
2 (= 2)
true
80 (= 2 x 2 x 2 x 2 x 5)
true
2017 (= 2017)
true
2019 (= 3 x 673)
true
2027 (= 2027)
false
11111 (= 41 x 271)
true
45183 (= 3 x 15061)
false
102349 (= 13 x 7873)
false
999999 (= 3 x 3 x 3 x 7 x 11 x 13 x 37)
true
1234567 (= 127 x 9721)
false
4068289 (= 2017 x 2017)
true
Twój program nie musi dosłownie wyprowadzać true
i false
- żadnych wartości zgodnych z prawdą lub fałszem, aw rzeczywistości dowolne dwa różne wyniki, które są spójne we wszystkich przypadkach prawdziwych i fałszywych, są w porządku.
Nie możesz jednak używać liczb pierwszych w kodzie źródłowym. Liczby pierwsze występują w dwóch rodzajach:
Znaki lub sekwencje znaków reprezentujące literały liczb pierwszych.
Znaki
2
,3
,5
, i7
są nielegalne w językach, w których numery są ważne tokeny.Numer
141
jest nielegalny, ponieważ zawiera41
, mimo że1
i4
jest w inny sposób ważny.Znaki
B
iD
(lubb
id
) są nielegalne w językach, w których są zwykle używane jako 11 i 13, takich jak CJam lub Befunge.
Znaki, które mają wartości Unicode o największej wartości lub zawierają w swoich kodowaniach bajty o największej wartości.
Znaki
%)+/5;=CGIOSYaegkmq
są nielegalne w ASCII, podobnie jak znak powrotu karetki.Znak
ó
jest nielegalny w UTF-8, ponieważ ma0xb3
w nim kodowanie . Jednak w ISO-8859-1 jego kodowanie jest proste0xf3
, które jest złożone i dlatego jest w porządku.
Wygrywa najkrótszy kod do wykonania powyższego w dowolnym języku.
=
wykluczonych języków standardowych ...