Dans ce défi, nous avons appris un moyen de coder chaque entier positif en utilisant des arbres de facteurs.
Voici comment cela fonctionne:
La chaîne vide a la valeur 1.
(S)
oùS
est toute expression avec une valeur de S évaluée au S ème premier.AB
oùA
etB
sont des expressions arbirary avec des valeurs de A et B a respectivement la valeur A * B .
Par exemple, si nous voulions représenter 7, nous ferions
7 -> (4) -> (2*2) -> ((1)(1)) -> (()())
Il s'avère que nous pouvons représenter chaque nombre entier en utilisant cette méthode. En fait, certains chiffres que nous pouvons représenter de plusieurs façons. Parce que la multiplication est commutative, 10 est à la fois
((()))()
et
()((()))
En même temps, certains nombres ne peuvent être représentés que d'une seule manière. Prenez 8 par exemple. 8 ne peut être représenté que
()()()
Et puisque tous nos atomes sont les mêmes, nous ne pouvons pas utiliser la commutativité pour les réorganiser.
Alors maintenant, la question est "Quels nombres ne peuvent être représentés que d'une seule façon?". La première observation est celle que je viens de commencer à faire là-bas. Il semble que les pouvoirs parfaits aient des propriétés spéciales. En approfondissant les recherches, nous pouvons trouver 36, ce qui est 6 2 est une puissance parfaite mais a de multiples représentations.
(())()(())()
(())()()(())
()(())()(())
()(())(())()
()()(())(())
Et cela a du sens parce que 6 est déjà réorganisable, donc tout nombre que nous faisons sur 6 doit également être réorganisable.
Alors maintenant, nous avons une règle:
- Un nombre a une représentation unique s'il s'agit d'une puissance parfaite d'un nombre avec une représentation unique.
Cette règle peut nous aider à réduire la détermination si un nombre composé est unique à déterminer si un nombre premier est unique. Maintenant que nous avons cette règle, nous voulons comprendre ce qui rend un nombre premier unique. C'est en fait assez évident. Si nous prenons un nombre unique et l'enveloppons entre parenthèses, le résultat doit être unique et, dans le sens contraire si n a plusieurs représentations, le n e premier doit avoir plusieurs représentations. Cela donne la deuxième règle:
- Le n e premier est unique si et seulement si n est unique.
Ces deux règles sont récursives, nous allons donc avoir besoin d'un cas de base. Quel est le plus petit numéro unique? On pourrait être tenté de dire 2 parce que c'est juste ()
, mais 1, la chaîne vide, est encore plus petite et unique.
- 1 est unique.
Avec ces trois règles, nous pouvons déterminer si un nombre a un arbre de facteurs unique.
Tâche
Vous l'avez peut-être vu venir, mais votre tâche consiste à prendre un entier positif et à déterminer s'il est unique. Vous devez écrire un programme ou une fonction qui effectue ce calcul. Vous devez sortir l'une des deux valeurs possibles, ce que ces valeurs sont à vous, mais l'une devrait représenter "oui", étant sortie lorsque l'entrée est unique et l'autre devrait représenter "non" étant sortie autrement.
Vos réponses doivent être notées en octets avec moins d'octets mieux.
Cas de test
Voici les deux premiers numéros uniques:
1
2
3
4
5
7
8
9
11
16
17
19
23
25
27
31
Cas de test suggérés
5381 -> Unique
Il semble que OEIS A214577 soit en quelque sorte lié, donc si vous avez besoin de plus de cas de test, essayez-le, mais je ne sais pas ce sont les mêmes, alors utilisez-le à vos risques et périls.
Réponses:
Husk ,
1110 octetsUn octet enregistré grâce à Zgarb!
Retourne
1
pour unique,0
sinonEssayez-le en ligne! Ou retourner les 50 premiers
Explication:
la source
ȯp←
".ṁ¬
peut être juste¬
car la liste doit être non vide dans cette branche.Gelée , 10 octets
Après BEAUCOUP de tripoter!
Un lien monadique prenant un entier positif et retournant
1
s'il est unique ou0
sinon.Essayez-le en ligne!
Comment?
Attendez, logarithme, quoi?!
Permet de parcourir quelques exemples de la boucle.
Si
n=31
( 31 1 , onzième nombre premier):Si
n=625
( 5 4 ):Si
n=225
( 5 2 × 3 2 ):la source
APL (Dyalog) , 42 octets
L'utilisation
⎕CY'dfns'
avecdfns
es n'est pas très faisable sur tio.la source
Gelée , 11 octets
Essayez-le en ligne!
-2 grâce à un tour très génial de Jonathan Allan .
Utilisation de l'algorithme Husk de H.PWiz.
la source
None
vous pouvez faireÆfẋE$ḢÆCµl¿
pour 11 :)Pari / GP , 49 octets
Essayez-le en ligne!
la source