Dado um número inteiro positivo n , calcular o n th Wilson número W (n) , onde
e e = 1 se n tiver um módulo raiz primitivo n , caso contrário, e = -1. Em outras palavras, n tem uma raiz primitiva se não existe um número inteiro x , onde 1 < x < n-1 e X 2 = 1 mod n .
- Isso é código-golfe, portanto, crie o código mais curto para uma função ou programa que calcule o n- ésimo número de Wilson para um número inteiro de entrada n > 0.
- Você pode usar a indexação com base em 1 ou em 0. Você também pode optar por imprimir os primeiros n números Wilson.
- Essa é a sequência OEIS A157249 .
Casos de teste
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
ee = -1
, o resultado do produto seria0
. (desculpe-me por fazer muitas perguntas, mas preciso de esclarecimentos para minha resposta: p)Respostas:
Geléia ,
87 bytes1 byte graças a Dennis.
Experimente online!
Você realmente não precisa calcular,
e
pois precisa dividir de qualquer maneira.fonte
gRỊT
salva um byte.gRỊT
detalhes ty de geléia ...Casca , 11 bytes
Experimente online!
Explicação
fonte
Mathematica, 91 bytes
fonte
Pitão , 11 bytes
Experimente aqui!
Quão?
/h*Ff>2iTQS
- programa completo.S
- Gere a faixa inclusiva [1, entrada]f
- Mantenha os filtros:iTQ
- cujo GCD com a entrada.>2
- é inferior a dois (pode ser substituído por um dos seguintes itensq1
:,!t
)*F
- Aplique a multiplicação repetidamente. Em outras palavras, o produto da lista.h
- Incremente o produto em 1./
- Divisão de piso com a entrada.TL; DR : Pegue todos os coprimes da entrada no intervalo [1, entrada] , obtenha o produto, aumente e divida pela entrada.
fonte
Python 2 , 62 bytes
Experimente online!
fonte
J, 33 bytes
Este é mais um pedido para ver uma melhoria do que qualquer outra coisa. Tentei uma solução tácita primeiro, mas era mais longa do que isso.
explicação
Esta é uma tradução bastante direta da solução do Sr. Xcoder em J.
Experimente online!
fonte
05AB1E , 8 bytes
Experimente online!
fonte
R , 82 bytes
Usa divisão inteira em vez de descobrir
e
como muitas respostas aqui, embora eu tenha resolvido isso,e=2*any((1:n)^2%%n==1%%n)-1
incluindo o caso extremo don=1
qual eu achava bem legal.Usa a função GCD vetorizada do rturnbull .
Experimente online!
fonte
Pari / GP , 36 bytes
Experimente online!
fonte
JavaScript (ES6),
727068 bytesA divisão inteira ataca novamente. Editar: salvou 2 bytes graças a @Shaggy. Salvou mais 2 bytes, tornando-o muito mais recursivo, para que ele falhe em valores menores do que costumava.
fonte
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
Experimente online!
Usa o truque de divisão inteira como todas as outras respostas.
Usa índices baseados em 1.
Explicação
fonte
Japonês , 11 bytes
Tente
Explicação
Entrada implícita de número inteiro
U
.Gere uma matriz de números inteiros de 1 a
U
.O filtro (
f
) é primo deU
.Reduza pela multiplicação.
Adicione 1.
Divida por
U
, classifique o resultado e a saída implicitamente.fonte
Axioma, 121 bytes
adicione algum tipo, ungolf isso e resultado
fonte
JavaScript (ES6),
838180787668 bytesMinha primeira passagem para isso foi alguns bytes mais longa que a solução de Neil, e é por isso que originalmente a deixei em favor da solução de redução de matriz abaixo. Desde então, joguei golfe para amarrar Neil.
Tente
Não recursivo, 76 bytes
Eu queria tentar uma solução não recursiva para ver como seria a solução - não tão ruim quanto eu esperava.
Tente
fonte