Nesse desafio , aprendemos uma maneira de codificar todo número inteiro positivo usando árvores fatoriais.
Aqui está como funciona:
A cadeia vazia tem o valor 1.
(S)
ondeS
é qualquer expressão com um valor de S é avaliada como a S ª prime.AB
ondeA
eB
são expressões arbirary com valores de A e B , respectivamente, têm valor A * B .
Por exemplo, se quiséssemos representar 7, faríamos
7 -> (4) -> (2*2) -> ((1)(1)) -> (()())
Acontece que podemos representar todos os números inteiros usando esse método. De fato, alguns números podemos representar de várias maneiras. Como a multiplicação é comutativa, 10 são ambos
((()))()
e
()((()))
Ao mesmo tempo, alguns números podem ser representados apenas de uma maneira. Tome 8 por exemplo. 8 só pode ser representado como
()()()
E como todos os nossos átomos são os mesmos, não podemos usar a comutatividade para reorganizá-los.
Então agora a pergunta é "Quais números só podem ser representados de uma maneira?". A primeira observação é aquela que eu comecei a fazer lá atrás. Parece que poderes perfeitos têm algumas propriedades especiais. Sob investigação adicional, podemos encontrar 36, que é 6 2, é uma potência perfeita, mas tem múltiplas representações.
(())()(())()
(())()()(())
()(())()(())
()(())(())()
()()(())(())
E isso faz sentido, porque 6 já é reorganizável; portanto, qualquer número que fizermos de 6 também deve ser reorganizável.
Então agora temos uma regra:
- Um número tem uma representação única se for a potência perfeita de um número com uma representação exclusiva.
Essa regra pode nos ajudar a reduzir a determinação se um número composto é exclusivo para determinar se um número primo é único. Agora que temos essa regra, queremos descobrir o que torna um número primo único. Isso é realmente muito evidente. Se tomarmos um número único e envolvê-la em parênteses, o resultado deve ser único, e, indo para o outro lado, se n tem múltiplas representações do n º nobre deve ter múltiplas representações. Isso produz a segunda regra:
- O n º principal é único, se e somente se n é único.
Como essas regras são recursivas, precisamos de um caso básico. Qual é o menor número único? Pode-se ficar tentado a dizer 2 porque é apenas ()
, mas 1, a sequência vazia, é ainda menor e é única.
- 1 é único.
Com essas três regras, podemos determinar se um número tem uma árvore de fatores exclusiva.
Tarefa
Você já deve ter percebido isso, mas sua tarefa é pegar um número inteiro positivo e determinar se é único. Você deve escrever um programa ou função que faça esse cálculo. Você deve emitir um dos dois valores possíveis, quais são esses valores, mas um deve representar "yes", sendo exibido quando a entrada for exclusiva e um deve representar "no", caso contrário.
Suas respostas devem ser pontuadas em bytes, com menos bytes sendo melhores.
Casos de teste
Aqui estão os primeiros números únicos:
1
2
3
4
5
7
8
9
11
16
17
19
23
25
27
31
Casos de teste sugeridos
5381 -> Unique
Parece que o OEIS A214577 está de alguma forma relacionado, portanto, se você precisar de mais casos de teste, tente lá, mas eu não sei que eles são os mesmos, portanto, use por seu próprio risco.
Respostas:
Casca ,
1110 bytesGuardado um byte graças ao Zgarb!
Retorna
1
para exclusivo,0
caso contrárioExperimente online! Ou retornando os primeiros 50
Explicação:
fonte
ȯp←
".ṁ¬
pode ser apenas¬
porque a lista não deve estar vazia nesse ramo.Gelatina , 10 bytes
Depois de muita brincadeira!
Um link monádico que pega um número inteiro positivo e retorna
1
se é exclusivo ou0
não.Experimente online!
Quão?
Espere, logaritmo, o que ?!
Vamos analisar alguns exemplos do loop.
Se
n=31
( 31 1 , o décimo primeiro primo):Se
n=625
( 5 4 ):Se
n=225
( 5 2 × 3 2 ):fonte
APL (Dyalog) , 42 bytes
Usar
⎕CY'dfns'
comdfns
es não é muito viável.fonte
Gelatina , 11 bytes
Experimente online!
-2 graças a um truque muito genial de Jonathan Allan .
Usando o algoritmo Husk de H.PWiz.
fonte
None
que você pode fazerÆfẋE$ḢÆCµl¿
para 11 :)Pari / GP , 49 bytes
Experimente online!
fonte