Jelly , 13 bedeutungsvolle Charaktere, sprachliche Postdates herausfordern
R µ ọḊ *@Ḋ ċ >2 µ Ðf
Probieren Sie es online!
Alle Leerzeichen hier sind unbedeutend. Ich habe es benutzt, um die Struktur meiner Antwort zu zeigen, wie es in der Frage steht.
So funktioniert das:
R µ ọḊ *@Ḋ ċ >2 µ Ðf
R Ðf Find all numbers n from 1 to the input, such that:
µ µ (grouping marks, like {} in C)
Ḋ Ḋ Take the range from 2 to n
ọ Find the number of times each divides n
*@ Raise the range from 2 to n to these powers
ċ Count the number of times n appears
>2 and the result must be greater than 2
Wenn wir zum Beispiel n = 256 testen, überprüfen wir, wie oft jede der Zahlen von 2 bis 256 in 256 geteilt wird. Die einzigen Zahlen, die mehr als einmal dividieren, sind 2 (die 8 mal dividieren), 4 (die 4 dividieren) mal), 8 (die zweimal teilt) und 16 (die zweimal teilt). Wenn wir also die Anzahl der Divisionen auf die dort festgelegten Kräfte erhöhen, erhalten wir:
2⁸, 3, 4⁴, 5, 6, 7, 8², 9, 10, 11, 12, 13, 14, 15, 16², 17, ..., 255, 256
Dies ergibt den ursprünglichen Wert 256, eine Anzahl von Malen, die der Art entspricht, wie 256 eine perfekte Potenz ist, plus eins (das letzte Element ergibt 256, weil 256 = 256¹). Wenn wir also 256 mehr als zweimal im Array sehen (und das tun wir in diesem Fall; 8² ist 64, aber die anderen "interessanten" Elemente produzieren alle 256), muss es eine perfekte Potenz sein.