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 2156na przykład: w końcu przychodzi mi do głowy, że jedno 21i drugie 56jest wielokrotnością 7, a więc na pewno 2156 = 21 x 100 + 56jest 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 nwejściu dodatnią liczbę całkowitą i zwraca prawdziwą wartość, jeśli istnieje dzielnik d(większy niż 1), który nmoż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
npodzielona 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ł1230na123i0jest 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
dlub jeden z „elementów”n(lubnsam 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 pierwszanda 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ę