Di kamar saya, saya punya jam culun ini (klik untuk ukuran penuh):
Sebagian besar tidak sulit untuk dipecahkan, tetapi yang untuk 4-jam sangat sulit:
Biasanya, sebagian kecil seperti 1/2 tidak masuk akal dalam aritmatika modular karena hanya bilangan bulat yang terlibat. Maka, cara yang benar adalah dengan melihat ini sebagai kebalikan dari 2, atau dengan kata lain, adalah angka di mana . Dengan kata lain, pemikiran sesaat akan mengungkapkan itu karena .
Namun, hanya dengan menemukan invers multiplikasi akan terlalu mudah sebagai tantangan. Jadi mari kita bahas kesulitan untuk eksponensial, atau dengan kata lain, menemukan logaritma modular atau logaritma diskrit dari 2. Dalam hal ini, 3 adalah logaritma modular 2 berkenaan dengan 7. Bagi Anda dengan teori bilangan / aljabar abstrak latar belakang, ini berarti menghitung urutan multiplikasi dari 2 modulo n.
Tantangan
Diberikan bilangan bulat ganjil positif n
lebih besar dari 1, menghasilkan bilangan bulat positif terkecil di x
mana .
Contohnya
n x
3 2
5 4
7 3
9 6
11 10
13 12
15 4
17 8
19 18
21 6
23 11
25 20
27 18
29 28
31 5
33 10
35 12
37 36
39 12
41 20
43 14
45 12
47 23
49 21
51 8
53 52
55 20
57 18
59 58
61 60
63 6
65 12
67 66
69 22
71 35
73 9
75 20
77 30
79 39
81 54
83 82
85 8
87 28
89 11
91 12
93 10
95 36
97 48
99 30
101 100
103 51
105 12
107 106
109 36
111 36
113 28
115 44
117 12
119 24
121 110
123 20
125 100
127 7
129 14
131 130
133 18
135 36
137 68
139 138
141 46
143 60
145 28
147 42
149 148
151 15
153 24
155 20
157 52
159 52
161 33
163 162
165 20
167 83
169 156
171 18
173 172
175 60
177 58
179 178
181 180
183 60
185 36
187 40
189 18
191 95
193 96
195 12
197 196
199 99
201 66
sumber
x^-1
berarti inversi multiplikasi dari x , yaitu angka y sedemikian sehingga xy = 1 . Di bidang bilangan real, 2 ^ -1 = 0,5 . Di ring bilangan bulat modulo 7 , 2 ^ -1 = 4 .Jawaban:
Jelly , 6 byte
Cobalah online!
Bagaimana itu bekerja
sumber
Pyth -
98 byteTest Suite .
f
ilters dari default 1 hingga menemukan beberapa x sedemikian rupa sehingga eksponensial modular dengan 2 dan input sama dengan 1.sumber
Python, 32 byte
Dimulai dengan 2, gandakan modulo hingga hasilnya 1, bertambah secara rekursif setiap kali, dan berakhir dengan hitungan 1 untuk nilai awal 2.
sumber
Mathematica, 24 byte
Saya hanya menggunakan built-in untuk ini.
sumber
APL, 8 byte
Ini adalah kereta fungsi monadik yang menerima integer di sebelah kanan dan mengembalikan integer. Untuk menyebutnya, tetapkan ke variabel.
Penjelasan (memanggil input
x
):Perhatikan bahwa hasilnya mungkin salah untuk input besar karena eksponensial dibulatkan.
sumber
⍴∘∪⊢|2*⍳
.Pyth, 14 byte
Penjelasan:
Coba di sini
sumber
66\n132\n198
masukan dari201
.JavaScript (ES6), 28 byte
Berdasarkan pendekatan rekursif @ xnor yang brilian.
sumber
=>
, saya kira.)f(3)
. Untuk beberapa alasan bodoh, situs web itu tidak akan membiarkan Anda menggunakan fungsi ini kecuali jika Anda menyatakannya denganlet
atauvar
. Coba ini.05AB1E , 11 byte
Kode:
Penjelasan:
sumber
Julia,
2524 byteIni sederhana -
2.^(1:n)%n
menemukan kekuatan 2 dalam set,∪
adalahunion
, tetapi berfungsi sebagaiunique
dan mengembalikan hanya satu dari masing-masing kekuatan unik (dan karena ini adalah operator infix, saya dapat bergabung dengan 1 untuk menghemat satu byte dari∪(2.^(1:n)%n)
pendekatan). Kemudianendof
menghitung jumlah kekuatan unik, karena setelah mencapai 1, itu hanya akan mengulangi kekuatan yang ada, sehingga akan ada nilai unik sebanyak kekuatan yang menghasilkan 1.sumber
Serius, 14 byte
Hex Dump:
Cobalah secara Online
Penjelasan:
sumber
Haskell, 30 byte
Argumen helper
t
digandakan modulon
setiap langkah sampai sama dengan 1.sumber
Japt, 17 byte
Cobalah online!
Ini akan menjadi tiga byte lebih pendek jika Japt memiliki fungsi "temukan item pertama yang cocok dengan kondisi ini". Mulai kerjakan satu
Bagaimana itu bekerja
sumber
PARI / GP, 20 byte
sumber
Julia,
3326 byteIni adalah fungsi lambda yang menerima integer dan mengembalikan integer. Untuk menyebutnya, tetapkan ke variabel.
Kami membangun sebuah array sebagai 2 dinaikkan ke setiap daya integer dari 1 ke
n
, kemudian kami menemukan indeks 1 pertama dalam array ini.Disimpan 7 byte berkat Glen O!
sumber
2.^(1:n)%n
.Perl 5, 29 byte
Ujung topi.
sumber
MATL , 13 byte
Berjalan pada Oktaf dengan komit GitHub saat ini dari kompiler.
Berfungsi untuk input hingga
51
(karena keterbatasandouble
tipe data).Contoh
Penjelasan
sumber
Unicorn ,
1307 1062976 bytesSaya mencoba membuat unicorn bahasa golf yang serius tapi itu agak sulit ...
Mudah-mudahan saya akan menemukan cara untuk mempertahankan "unicorn-ness" dari bahasa sementara membuat banyak kurang byte
Gambar:
Menggunakan penyandian khusus .
Jawaban ini tidak bersaing karena menggunakan versi Unicorn yang dibuat setelah bahasa ini
sumber
((2)2(2))(())
keluar dari kode dengan interpreter @ Downgoat?𝔼𝕊𝕄𝕚𝕟, 11 karakter / 22 byte
Try it here (Firefox only).
Menggunakan loop sementara. Ini adalah salah satu dari beberapa kali loop sementara lebih baik daripada memetakan rentang.
Penjelasan
sumber
CJam, 15 byte
Peter Taylor menyimpan satu byte. Rapi!
sumber
1fe|
Anda bisa:)
dan kemudian)
setelah melakukan#
.2qi,:)f#_,f%1#)
Prolog, 55 byte
Kode:
Dijelaskan:
Contoh:
Cobalah online di sini
sumber