Mengingat bilangan bulat positif n , menghitung n th Wilson nomor W (n) di mana
dan e = 1 jika n memiliki akar modulo primitif n , jika e = -1. Dengan kata lain, n memiliki akar primitif jika tidak ada bilangan bulat x di mana 1 < x < n-1 dan x 2 = 1 mod n .
- Ini adalah kode-golf sehingga membuat kode terpendek untuk fungsi atau program yang menghitung n th nomor Wilson untuk integer masukan n > 0.
- Anda dapat menggunakan pengindeksan berbasis 1 atau 0. Anda juga dapat memilih untuk menampilkan angka n Wilson pertama .
- Ini adalah urutan OEIS A157249 .
Uji Kasus
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
dane = -1
, hasil dari produk itu adalah0
. (maaf mengajukan banyak pertanyaan tetapi saya perlu klarifikasi untuk jawaban saya: p)Jawaban:
Jelly ,
87 byteTerima kasih 1 byte untuk Dennis.
Cobalah online!
Anda tidak benar-benar harus menghitung
e
karena Anda harus tetap membagi.sumber
gRỊT
menghemat satu byte.gRỊT
rincian ty dari Jelly ...Sekam , 11 byte
Cobalah online!
Penjelasan
sumber
Mathematica, 91 byte
sumber
Pyth , 11 byte
Coba di sini!
Bagaimana?
/h*Ff>2iTQS
- Program lengkap.S
- Hasilkan kisaran inklusif [1, masukan]f
- Saring-simpan itu:iTQ
- GCD siapa dengan input.>2
- Apakah kurang dari dua (dapat digantikan oleh salah satu dari berikut:q1
,!t
)*F
- Terapkan penggandaan berulang kali. Dengan kata lain, produk dari daftar.h
- Menambah produk dengan 1./
- Pembagian lantai dengan input.TL; DR : Dapatkan semua koprimes ke input dalam rentang [1, input] , dapatkan produk mereka, tambahkan dan bagi dengan input.
sumber
Python 2 , 62 byte
Cobalah online!
sumber
J, 33 byte
Yang ini lebih merupakan permintaan untuk melihat peningkatan daripada yang lainnya. Saya mencoba solusi diam-diam terlebih dahulu, tetapi lebih lama dari ini.
penjelasan
Ini adalah terjemahan yang cukup mudah dari solusi Mr. Xcoder ke J.
Cobalah online!
sumber
05AB1E , 8 byte
Cobalah online!
sumber
R , 82 byte
Menggunakan pembagian bilangan bulat daripada mencari tahu
e
seperti banyak jawaban di sini, meskipun saya berhasil menemukan itue=2*any((1:n)^2%%n==1%%n)-1
termasuk kasus tepin=1
yang saya pikir cukup rapi.Menggunakan fungsi GCD vektor rturnbull .
Cobalah online!
sumber
Pari / GP , 36 byte
Cobalah online!
sumber
JavaScript (ES6),
727068 byteDivisi integer menyerang lagi. Sunting: Disimpan 2 byte berkat @Shaggy. Menyimpan 2 byte lebih lanjut dengan membuatnya lebih rekursif, sehingga mungkin gagal untuk nilai yang lebih kecil daripada sebelumnya.
sumber
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 byte
Cobalah online!
Menggunakan trik pembagian integer karena semua jawaban lainnya.
Menggunakan indeks berbasis 1.
Penjelasan
sumber
Japt , 11 byte
Cobalah
Penjelasan
Input bilangan bulat implisit
U
.Buat array bilangan bulat dari 1 hingga
U
.Saring (
f
) kata sandi utama dariU
.Kurangi dengan multiplikasi.
Tambahkan 1.
Bagi dengan
U
, lantai hasil dan output tersirat.sumber
Aksioma, 121 byte
tambahkan beberapa jenis, ungolf itu dan hasil
sumber
JavaScript (ES6),
838180787668 bytePass pertama saya pada ini adalah beberapa byte lebih lama dari solusi Neil, itulah sebabnya saya awalnya membuangnya demi solusi pengurangan array di bawah ini. Sejak itu saya bermain golf untuk mengikat dengan Neil.
Cobalah
Non-rekursif, 76 byte
Saya ingin mencoba solusi non-rekursif untuk melihat bagaimana hasilnya - tidak seburuk yang saya harapkan.
Cobalah
sumber