Etant donné un nombre entier positif n , le calcul de la n ième Wilson nombre W (n) , où
et e = 1 si n a un module racine primitif n , sinon e = -1. En d'autres termes, n a une racine primitive s'il n'existe pas un entier x où 1 < x < n-1 et x 2 = 1 mod n .
- Il s'agit de code-golf, alors créez le code le plus court pour une fonction ou un programme qui calcule le n ème nombre Wilson pour un nombre entier d' entrée n > 0.
- Vous pouvez utiliser une indexation basée sur 1 ou basée sur 0. Vous pouvez également choisir de sortir le premier n nombres Wilson.
- Il s'agit de la séquence OEIS A157249 .
Cas de test
n W(n)
1 2
2 1
3 1
4 1
5 5
6 1
7 103
8 13
9 249
10 19
11 329891
12 32
13 36846277
14 1379
15 59793
16 126689
17 1230752346353
18 4727
19 336967037143579
20 436486
21 2252263619
22 56815333
23 48869596859895986087
24 1549256
25 1654529071288638505
k = 1
ete = -1
, le résultat du produit serait0
. (désolé de poser beaucoup de questions mais j'ai besoin de clarifications pour ma réponse: p)Réponses:
Gelée ,
87 octets1 octet merci à Dennis.
Essayez-le en ligne!
Vous n'avez pas vraiment besoin de calculer
e
car vous devez quand même diviser.la source
gRỊT
enregistre un octet.gRỊT
Husk , 11 octets
Essayez-le en ligne!
Explication
la source
Mathematica, 91 octets
la source
Pyth , 11 octets
Essayez-le ici!
Comment?
/h*Ff>2iTQS
- Programme complet.S
- Générer la plage inclusive [1, entrée]f
- Filtrez-les:iTQ
- dont GCD avec l'entrée.>2
- est inférieure à deux (peut être remplacé par une ou l' autre des éléments suivants:q1
,!t
)*F
- Appliquer la multiplication à plusieurs reprises. En d'autres termes, le produit de la liste.h
- Augmentez le produit de 1./
- Division du plancher avec l'entrée.TL; DR : Obtenez tous les coprimes à l'entrée dans la plage [1, entrée] , obtenez leur produit, incrémentez-le et divisez-le par l'entrée.
la source
Python 2 , 62 octets
Essayez-le en ligne!
la source
J, 33 octets
Celui-ci est plus une demande de voir une amélioration que toute autre chose. J'ai d'abord essayé une solution tacite, mais c'était plus long que cela.
explication
Il s'agit d'une traduction assez simple de la solution de M. Xcoder en J.
Essayez-le en ligne!
la source
05AB1E , 8 octets
Essayez-le en ligne!
la source
R , 82 octets
Utilise la division entière plutôt que de trouver
e
comme beaucoup de réponses ici, bien que j'aiee=2*any((1:n)^2%%n==1%%n)-1
compris que le cas de bord den=1
que je pensais était assez soigné.Utilise la fonction GCD vectorisée de rturnbull .
Essayez-le en ligne!
la source
Pari / GP , 36 octets
Essayez-le en ligne!
la source
JavaScript (ES6),
727068 octetsLa division entière frappe à nouveau. Edit: sauvé 2 octets grâce à @Shaggy. Enregistré 2 octets supplémentaires en le rendant beaucoup plus récursif, il peut donc échouer pour des valeurs plus petites qu'auparavant.
la source
f=(n,i=n,p=1,g=(a,b)=>b?g(b,a%b):a)=>--i?f(n,i,g(n,i)-1?p:p*i):-~p/n|0
(n,x=n)=>(g=s=>--x?g(s*(h=(y,z)=>z?h(z,y%z):--y?1:x)(n,x)):++s)(1)/n|0
Haskell , 42 octets
Essayez-le en ligne!
Utilise l'astuce de division entière comme toutes les autres réponses.
Utilise des indices basés sur 1.
Explication
la source
Japt , 11 octets
Essayez-le
Explication
Saisie implicite d'entier
U
.Générez un tableau d'entiers de 1 à
U
.Filter (
f
) co-nombres premiers deU
.Réduisez par multiplication.
Ajoutez 1.
Divisez par
U
, plancher le résultat et implicitement sortie.la source
Axiome, 121 octets
ajouter un type, débloquer cela et le résultat
la source
JavaScript (ES6),
838180787668 octetsMon premier passage à ceci était quelques octets plus long que la solution de Neil, c'est pourquoi je l'ai abandonné à l'origine en faveur de la solution de réduction de tableau ci-dessous. Je l'ai depuis joué au golf pour nouer avec Neil.
Essayez-le
Non récursif, 76 octets
Je voulais essayer une solution non récursive pour voir comment cela se passerait - pas aussi mauvais que ce à quoi je m'attendais.
Essayez-le
la source