In questa sfida abbiamo imparato un modo per codificare ogni numero intero positivo usando alberi dei fattori.
Ecco come funziona:
La stringa vuota ha valore 1.
(S)
dove siS
trova qualsiasi espressione con un valore di S viene valutata come S primo.AB
doveA
eB
sono espressioni arbirary con valori di A e B ha rispettivamente valore A * B .
Ad esempio, se volessimo rappresentare 7, lo faremmo
7 -> (4) -> (2*2) -> ((1)(1)) -> (()())
Risulta che possiamo rappresentare ogni numero intero usando questo metodo. In effetti alcuni numeri possiamo rappresentare in più modi. Poiché la moltiplicazione è commutativa, 10 è entrambe le cose
((()))()
e
()((()))
Allo stesso tempo, alcuni numeri possono essere rappresentati solo in 1 modo. Prendi 8 per esempio. 8 può essere rappresentato solo come
()()()
E poiché tutti i nostri atomi sono uguali, non possiamo usare la commutabilità per riorganizzarli.
Quindi ora la domanda è "Quali numeri possono essere rappresentati solo in 1 modo?". La prima osservazione è quella che ho appena iniziato a fare lì. Sembra che i poteri perfetti abbiano alcune proprietà speciali. Sotto ulteriori indagini possiamo trovare 36, che è 6 2 è un potere perfetto ma ha molteplici rappresentazioni.
(())()(())()
(())()()(())
()(())()(())
()(())(())()
()()(())(())
E questo ha senso perché 6 è già riordinabile, quindi anche qualsiasi numero che facciamo su 6 deve essere riorganizzabile.
Quindi ora abbiamo una regola:
- Un numero ha una rappresentazione unica se è un potere perfetto di un numero con una rappresentazione unica.
Questa regola può aiutarci a ridurre la determinazione se un numero composto è univoco per determinare se un numero primo è univoco. Ora che abbiamo quella regola, vogliamo capire cosa rende unico un numero primo . Questo è in realtà abbastanza evidente. Se prendiamo un numero univoco e lo racchiudiamo tra parentesi, il risultato deve essere univoco e, in caso contrario, se n ha rappresentazioni multiple, l' n- prime deve avere rappresentazioni multiple. Questo produce la seconda regola:
- L' n primo è unico se e solo se n è unico.
Entrambe queste regole sono ricorsive, quindi avremo bisogno di un caso base. Qual è il numero univoco più piccolo? Si potrebbe essere tentati di dire 2 perché è giusto ()
, ma 1, la stringa vuota, è ancora più piccola ed è unica.
- 1 è unico.
Con queste tre regole possiamo determinare se un numero ha un albero dei fattori univoco.
Compito
Potresti averlo visto arrivare, ma il tuo compito è prendere un numero intero positivo e determinare se è univoco. È necessario scrivere un programma o una funzione che esegue questo calcolo. Dovresti generare uno di due possibili valori, quali sono questi valori dipende da te, ma uno dovrebbe rappresentare "sì", essendo output quando l'input è univoco e uno dovrebbe rappresentare "no" in output altrimenti.
Le risposte dovrebbero essere classificate in byte con meno byte migliori.
Casi test
Ecco i primi numeri univoci della coppia:
1
2
3
4
5
7
8
9
11
16
17
19
23
25
27
31
Casi di prova suggeriti
5381 -> Unique
Sembra che OEIS A214577 sia in qualche modo correlato, quindi se hai bisogno di più casi di prova prova lì, ma non so che sono gli stessi, quindi usa a tuo rischio.