Manchmal, wenn ich müßig versuche, die vor mir auftauchende Zahl zu berücksichtigen¹, merke ich nach einer Weile, dass es einfacher ist, als ich dachte. Nehmen wir 2156
zum Beispiel: Irgendwann fällt mir ein, dass beide 21
und ein 56
Vielfaches von sind 7
, und so sicherlich 2156 = 21 x 100 + 56
auch ein Vielfaches von 7
.
Ihre Aufgabe ist es, einen Code zu schreiben, der Zahlen identifiziert, die aufgrund eines solchen Zusammentreffens leichter zu faktorisieren sind.
Etwas präziser:
Schreiben Sie ein Programm oder eine Funktion mit einer positiven Ganzzahl n
als Eingabe verwendet und einen Wahrheitswert zurückgibt, wenn ein Divisor d
(größer als 1
) vorhanden n
ist, der in zwei Teile geteilt werden kann, um zwei positive Ganzzahlen zu erhalten, von denen jede ein Vielfaches von ist d
. Wenn nicht, wird ein falscher Wert zurückgegeben.
- "In zwei Hälften geteilt" bedeutet, was Sie denken: Die übliche Basis-10-Darstellung unterteilt sich
n
irgendwann in eine vordere und eine hintere Hälfte, um zwei weitere Basis-10-Ganzzahlen zu erhalten. Es ist in Ordnung, wenn die zweite Ganzzahl eine führende Null hat (beachten Sie jedoch, dass es sich um eine positive Ganzzahl handeln muss, sodass die Aufteilung1230
in123
und0
ungültig ist). - Die Wahrheits- und Falschheitswerte können von der Eingabe abhängen. Wenn beispielsweise eine Ganzzahl ungleich Null in der Sprache Ihrer Wahl wahr ist, können Sie den Teiler
d
oder eines der "Teile" vonn
(oder sichn
selbst) zurückgeben. - Zum Beispiel
{2, 4, 6, 8}
ergibt jede gerade Zahl mit mindestens zwei Ziffern im Satz einen Wahrheitswert: Teilen Sie ihn einfach nach der ersten geraden Ziffer. Zum Beispieln
liefert jede Primzahl ebenso wie jede einstellige Zahl einen falschen Wert. - Beachten Sie, dass es ausreicht, Primteiler zu berücksichtigen
d
. - Sie können davon ausgehen, dass die Eingabe gültig ist (dh eine positive Ganzzahl).
Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes. Lösungen in allen Sprachen sind jedoch willkommen, sodass wir in jeder Sprache den kürzesten Code anstreben können, nicht nur den kürzesten Code insgesamt.
Testfälle
(Sie müssen nur einen Wahrheitswert oder einen falschen Wert ausgeben. Die folgenden Anmerkungen dienen lediglich der Erläuterung.) Einige Eingaben, die Wahrheitswerte liefern, sind:
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)
Einige Eingaben, die falsche Werte ergeben, sind:
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
¹ Ja, das mache ich wirklich