Dado un número entero positivo n , calcular el n º Wilson número W (n) donde
y e = 1 si n tiene un módulo raíz primitivo n , de lo contrario e = -1. En otras palabras, n tiene una raíz primitiva si no existe un número entero x donde 1 < x < n-1 y x 2 = 1 mod n .
- Esto es código de golf por lo que crear el código más corto para una función o programa que calcula el n º número Wilson por un número entero de entrada n > 0.
- Puede usar indexación basada en 1 o en 0. También puede optar por generar los primeros n números de Wilson.
- Esta es la secuencia OEIS A157249 .
Casos de prueba
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
ye = -1
, el resultado del producto sería0
. (perdón por hacer muchas preguntas pero necesito aclaraciones para mi respuesta: p)Respuestas:
Jalea ,
87 bytes1 byte gracias a Dennis.
Pruébalo en línea!
Realmente no tiene que calcular,
e
ya que necesita dividir de todos modos.fuente
gRỊT
Guarda un byte.gRỊT
detalles de la jalea ... tyCasco , 11 bytes
Pruébalo en línea!
Explicación
fuente
Mathematica, 91 bytes
fuente
Pyth , 11 bytes
Pruébalo aquí!
¿Cómo?
/h*Ff>2iTQS
- Programa completo.S
- Generar el rango inclusivo [1, entrada]f
- Filtrar-guardar esos:iTQ
- cuyo GCD con la entrada.>2
- sea inferior a dos (se puede sustituir por cualquiera de las siguientes situaciones:q1
,!t
)*F
- Aplicar multiplicación repetidamente. En otras palabras, el producto de la lista.h
- Incrementar el producto en 1./
- División de piso con la entrada.TL; DR : Lleve todos los coprimes a la entrada en el rango [1, entrada] , obtenga su producto, increméntelo y divídalo por la entrada.
fuente
Python 2 , 62 bytes
Pruébalo en línea!
fuente
J, 33 bytes
Esta es más una solicitud para ver una mejora que cualquier otra cosa. Primero probé una solución tácita, pero fue más larga que esto.
explicación
Esta es una traducción bastante sencilla de la solución del Sr. Xcoder a J.
Pruébalo en línea!
fuente
05AB1E , 8 bytes
Pruébalo en línea!
fuente
R , 82 bytes
Utiliza la división de enteros en lugar de descubrir
e
muchas respuestas aquí, aunque sí resolví eso,e=2*any((1:n)^2%%n==1%%n)-1
incluido el caso límite den=1
que pensé que era bastante bueno.Utiliza la función GCD vectorizada de rturnbull .
Pruébalo en línea!
fuente
Pari / GP , 36 bytes
Pruébalo en línea!
fuente
JavaScript (ES6),
727068 bytesLa división entera ataca de nuevo. Editar: Guardado 2 bytes gracias a @Shaggy. Ahorró otros 2 bytes haciéndolo mucho más recursivo, por lo que puede fallar para valores más pequeños de lo que solía.
fuente
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 bytes
Pruébalo en línea!
Utiliza el truco de la división de enteros como todas las otras respuestas.
Utiliza índices basados en 1.
Explicación
fuente
Japt , 11 bytes
Intentalo
Explicación
Entrada implícita de entero
U
.Genere una matriz de enteros de 1 a
U
.Filter (
f
) co-primos deU
.Reducir por multiplicación.
Añadir 1.
Dividir por
U
, piso el resultado y la salida implícita.fuente
Axioma, 121 bytes
agregar algún tipo, deshacer eso y resultado
fuente
JavaScript (ES6),
838180787668 bytesMi primer paso en esto fue unos pocos bytes más largo que la solución de Neil, por lo que originalmente lo abandoné a favor de la solución de reducción de matriz a continuación. Desde entonces lo he jugado para empatar con Neil.
Intentalo
No recursivo, 76 bytes
Quería probar una solución no recursiva para ver cómo resultaría, no tan mal como esperaba.
Intentalo
fuente