Czasami, gdy bezczynnie próbuję uwzględnić liczbę, która pojawia się przede mną¹, po chwili zdaję sobie sprawę, że jest to łatwiejsze niż myślałem. Weźmy 2156
na przykład: w końcu przychodzi mi do głowy, że jedno 21
i drugie 56
jest wielokrotnością 7
, a więc na pewno 2156 = 21 x 100 + 56
jest wielokrotnością 7
.
Twoim zadaniem jest napisanie kodu, który identyfikuje liczby, które są łatwiejsze do obliczenia z powodu tego rodzaju zbiegu okoliczności.
Dokładniej:
Napisz program lub funkcję, która przyjmuje na n
wejściu dodatnią liczbę całkowitą i zwraca prawdziwą wartość, jeśli istnieje dzielnik d
(większy niż 1
), który n
można podzielić na dwie części, aby uzyskać dwie dodatnie liczby całkowite, z których każda jest wielokrotnością d
; zwraca wartość fałsz, jeśli nie.
- „Posiekane na dwa” oznacza to, co myślisz: zwykła reprezentacja bazy-10
n
podzielona w pewnym momencie na przednią i tylną połowę, aby uzyskać dwie inne liczby całkowite base-10. Jest w porządku, jeśli druga liczba całkowita ma wiodące zero (ale pamiętaj, że musi to być dodatnia liczba całkowita, więc podział1230
na123
i0
jest niepoprawny). - Wartości prawdy i fałszu mogą zależeć od danych wejściowych. Na przykład, jeśli jakakolwiek niezerowa liczba całkowita jest zgodna z prawdą w wybranym języku, możesz zwrócić dzielnik
d
lub jeden z „elementów”n
(lubn
sam w tym zakresie). - Na przykład dowolna liczba parzysta zawierająca co najmniej dwie cyfry w zestawie
{2, 4, 6, 8}
da prawdziwą wartość: po prostu podziel ją po pierwszej parzystej cyfrze. Na przykład każda liczba pierwszan
da wartość fałszowania, podobnie jak każda liczba jednocyfrowa. - Zauważ, że wystarczy rozważyć podstawowe dzielniki
d
. - Możesz założyć, że dane wejściowe są prawidłowe (dodatnia liczba całkowita).
To jest golf golfowy , więc wygrywa najkrótszy kod w bajtach. Ale rozwiązania we wszystkich językach są mile widziane, więc możemy dążyć do najkrótszego kodu w każdym języku, a nie tylko najkrótszego kodu w ogóle.
Przypadki testowe
(Musisz podać tylko wartość prawdy lub fałszu; poniższe adnotacje służą jedynie wyjaśnieniu). Niektóre dane wejściowe, które dają prawdziwe wartości, to:
39 (3 divides both 3 and 9)
64 (2 divides both 6 and 4)
497 (7 divides both 49 and 7)
990 (splitting into 99 and 0 is invalid; but 9 divides both 9 and 90)
2233 (11 divides both 22 and 33)
9156 (3 divides both 9 and 156; or, 7 divides both 91 and 56)
11791 (13 divides both 117 and 91)
91015 (5 divides both 910 and 15)
1912496621 (23 divides both 1912496 and 621; some splittings are multiples of 7 as well)
9372679892 (2473 divides both 937267 and 9892; some splittings are multiples of 2 as well)
Niektóre dane wejściowe, które dają wartości fałszowania, to:
52
61
130 (note that 13 and 0 is not a valid splitting)
691
899
2397
9029
26315
77300 (neither 7730 and 0 nor 773 and 00 are valid splittings)
2242593803
¹ tak, naprawdę to robię