Définition
- Deux nombres entiers sont premiers s'ils ne partagent aucun diviseur commun positif autre que
1
. a(1) = 1
a(2) = 2
a(n)
est le plus petit entier positif qui est un premier entre lea(n-1)
eta(n-2)
et n'est pas encore apparu, pour l'entiern >= 3
.
Tâche
- Étant donné un entier positif
n
, sortie / impressiona(n)
.
Exemple
a(11) = 6
parce qu'il6
est coprime avec les deux derniers prédécesseurs (à savoir,11
et13
) et6
n'a pas paru auparavant.
Remarques
- Notez que la séquence n'est pas ascendante, ce qui signifie qu'un élément peut être plus petit que son prédécesseur.
Spécifications
- Vous devez utiliser 1 indexé.
Cas de test
n a(n)
1 1
2 2
3 3
4 5
5 4
6 7
7 9
8 8
9 11
10 13
11 6
12 17
13 19
14 10
15 21
16 23
17 16
18 15
19 29
20 14
100 139
1000 1355
10000 13387
100000 133361
Notation
- Étant donné que coprime signifie que les deux nombres partagent un seul diviseur (
1
) et qu'il1
s'agit d'un petit nombre, votre code doit être aussi petit que possible en termes de nombre d'octets.
Références
- OEIS A084937
code-golf
sequence
number-theory
Leaky Nun
la source
la source
Réponses:
Python 3.5,
160141126 126124121109 octetsIl s'agit d'une implémentation simple de la définition de la séquence. Suggestions de golf bienvenues.
Edit: -17 octets grâce à Leaky Nun. -9 octets grâce à Peter Taylor. -6 octets grâce à Sp3000 et passage à Python 3.5.
Ungolfing:
la source
import math
alorsg=math.gcd
devrait être plus court que de définir le vôtreg
. Pour avant 3.5, vous pouvez fairefrom fractions import*
pourgcd
.c=3
à l'intérieur de la boucle, vous ne devez le faire qu'une seule fois. À mon avis, vous enregistrez 3 caractères.r=[c]+r
plutôt que+=
, mais trois indices négatifs deviennent positifs. Et puis il y a une autre économie de 2 caractères de la réécriture en tant que lambda, bien que ce soit un changement assez radical:from fractions import*;F=lambda n,r=[2,1],c=3:n<2and r[1]or(c in r)+gcd(r[0]*r[1],c)<2and F(n-1,[c]+r)or F(n,r,c+1)
et pas besoin d'unprint
car ce n'est plus un programme complet.MATL ,
2827 octetsLe code est lent, mais donne le résultat correct.
Essayez-le en ligne! Ou vérifiez les dix premiers cas .
Une petite modification du code produit un tracé de la séquence:
Voyez-le comme de l'art ASCII , ou avec une sortie graphique dans le compilateur hors ligne:
Explication
la source
C, 185 octets
la source
En fait ,
383735333130 octetsIl s'agit d'une implémentation simple de la définition de fonction. Suggestions de golf bienvenues. Essayez-le en ligne!
Edit: -3 octets grâce à Leaky Nun.
Ungolfing:
la source
Haskell,
8173 octetsExemple d'utilisation:
((0:1:c[2,1])!!) 12
->17
.Construisez la liste de tous
a(n)
, en commençant par0
fixer l'index basé sur 11
et puis en suivantc[2,1]
.c
prend la tête de sa liste d'argumentsl
suivie d'un appel récursif avec le numéro suivant qui correspond (co-amorcé, non vu auparavant) ajouté devantl
. Choisissez len
e élément de cette liste.la source
R, 141 octets
non golfé
la source
Mathematica,
9790 octetsBasé sur
ma conjecture quea(n) < 2n
pour tousn
.Pour obtenir une exécution plus rapide, ajoutez
a@n=
après l'original:=
afin que la fonction n'ait pas besoin de recalculer les valeurs précédentes .Sauvegardé 7 octets grâce à Sherlock9 (si
gcd(a,b)=1
alorsgcd(ab,m) = gcd(a,m)*gcd(b,m)
)la source
ABS(a(n)-n) < n
"n
.Pyth, 23 octets
Suite de tests
Une implémentation assez simple, mais avec de belles astuces de golf.
la source