Jelly , 13 personaggi significativi, sfide post-lingua in lingua
R µ ọḊ *@Ḋ ċ >2 µ Ðf
Provalo online!
Tutto lo spazio qui è insignificante. L'ho usato per mostrare la struttura della mia risposta, come fa la domanda.
Ecco come funziona:
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
Ad esempio, quando testiamo n = 256, controlliamo il numero di volte in cui ciascuno dei numeri da 2 a 256 si divide in 256. Gli unici numeri che dividono più di una volta sono 2 (che divide 8 volte), 4 (che divide 4 volte), 8 (che divide due volte) e 16 (che divide due volte). Quindi quando aumentiamo il numero di divisioni ai poteri lì determinati, otteniamo:
2⁸, 3, 4⁴, 5, 6, 7, 8², 9, 10, 11, 12, 13, 14, 15, 16², 17, ..., 255, 256
Questo produce il valore originale, 256, un numero di volte uguale al modo in cui 256 è una potenza perfetta, più uno (l'ultimo elemento produce 256 perché 256 = 256¹). Quindi, se ne vediamo 256 più di due volte nell'array (e in questo caso lo facciamo; 8² è 64 ma gli altri elementi "interessanti" producono tutti 256), deve essere un potere perfetto.