Pengantar:
Anda secara tidak sengaja merusak aliran waktu dengan perangkat yang Anda buat untuk kesenangan, yang ternyata adalah mesin waktu. Akibatnya, Anda terdorong ke masa depan yang jauh. Anda menyadari bahwa komputasi, kekuatan pemrosesan, dan komputer pada umumnya telah berkembang dengan jumlah yang sangat besar, jumlah yang tidak terbatas tepatnya . Jadi, Anda mengambil sendiri komputer dengan memori tak terbatas dan kekuatan pemrosesan. Anda tidak tahu bagaimana itu dapat memiliki memori tak terbatas dan kekuatan pemrosesan tak terbatas, tetapi Anda hanya menerimanya dan kembali ke masa sekarang.
Tantangan:
Anda mendengar bahwa orang yang menemukan prime terbesar saat ini 2^74,207,281 − 1
dibayar $ 100.000. Anda memutuskan untuk membuat program yang menemukan prime berikutnya, karena Anda ingin mendapatkan kembali uang yang Anda habiskan untuk komputer. Anda membuat satu yang mengambil input dari suatu angka, dan menemukan bilangan prima berikutnya, baik dengan memaksa atau metode lain.
Klarifikasi:
Anda memiliki mesin hipotetis dengan memori tak terbatas dan kekuatan pemrosesan. Program Anda TIDAK HARUS dibatasi (misalnya: int C # dapat menyimpan dari -2,147,483,648
hingga 2,147,483,647
), baik program Anda harus dapat menyimpan, dan bekerja dengan jumlah berapapun berapapun. Anda memiliki sumber daya tanpa batas, jadi Anda tidak perlu peduli apakah Anda kehabisan memori jika Anda mengizinkannya.
Contoh I / O:
Input: Prime yang ditemukan terbesar saat ini dengan 22.338.618 digit.
Output: Tepatnya prime berikutnya
Jelas, Anda tidak perlu membuktikan bahwa itu bekerja, karena akan membutuhkan waktu satu ton untuk menghitung dalam mesin fisik. Tetapi jika Anda memindahkan program Anda ke mesin hipotetis dengan daya pemrosesan / memori yang tak terbatas, itu harus menghitung langsung.
Menemukan perdana berikutnya dan memeriksa apakah suatu bilangan prima, adalah dua hal yang sama sekali berbeda
Jawaban:
Mathematica, 9 byte
sumber
Python 3 , 45 byte
Cobalah online!
sumber
k
sama dengan hasil akhir,m
berisi(k-1)!^2
. Sejak (k-1)! = -1 mod k hanya berlaku ketika k adalah prime, kita punya (k-1)! (K-1)! = 1 mod k, yang bila dikalikan dengan k akan menjadi k itu sendiri. Anda menghitung kuadrat untuk menyingkirkan satu-satunya pengecualian (k-1)! = 0 mod k untuk k komposit, yang terjadi untuk k = 4. Benar?RecursionError: maximum recursion depth exceeded in comparison
untukf(1000)
RecursionError
.Python 2,
78777674 byte-1 byte terima kasih kepada @KritixiLithos
-1 byte terima kasih kepada @FlipTack
-2 byte terima kasih kepada @ElPedro
sumber
n%i<1
lebih pendek darin%i==0
if
.<1
n+=1
danif
ke dalam tab dan menyimpan 2 byteJelly , 2 byte
Cobalah online!
Ini secara implisit mengambil input z dan, menurut manual, menghasilkan bilangan prima terdekat yang benar-benar lebih besar dari z.
sumber
Oasis , 2 byte
Jalankan dengan
-n
bendera.Kode:
Cobalah online!
sumber
Bash + coreutils, 52 byte
Cobalah online!
Dokumentasi untuk bash dan faktor tidak menentukan nilai integer maksimum yang dapat mereka tangani (walaupun, dalam praktiknya, setiap implementasi memang memiliki nilai integer maksimum). Agaknya, di GNU masa depan pada mesin Anda yang tak terhingga besar, bash dan faktor akan memiliki bilangan bulat ukuran tak terbatas.
sumber
Maksima, 10 byte
Suatu fungsi mengembalikan bilangan prima terkecil lebih besar dari argumennya.
sumber
Brachylog , 2 byte
Cobalah online!
Penjelasan
sumber
Python dengan sympy, 28 byte
sympy.nextprime
adalah fungsi yang melakukan apa yang tertulis di kaleng. Bekerja untuk semua pelampung.repl.it
Python,
6659 byte-4 byte terima kasih kepada Lynn (gunakan
-~
)-3 byte terima kasih kepada FlipTack (gunakan
and
danor
, yang memungkinkan...==1
untuk dialihkan ke suatu...-1
kondisi.)repl.it
Fungsi rekursif yang dihitung dari
n
sampai prima ditemukan dengan menguji bahwa hanya ada satu angkan-1
yang membaginya (yaitu 1). Berfungsi untuk semua bilangan bulat, menimbulkan kesalahan untuk float.Bekerja pada 2.7.8 dan 3.5.2, tidak berfungsi pada 3.3.3 (kesalahan sintaksis karena kurangnya ruang antara
==1
danelse
)sumber
(n+1)%(i+1)
adalah-~n%-~i
, saya pikir.and
/or
bekerja, sepertif=lambda n:sum(-~n%-~i<1for i in range(n))==1and-~n or f(n+1)
?f=lambda n:sum(-~n%-~i<1for i in range(n))-1and f(n+1)or-~n
Python,
11483 byteTanpa builtin, jika ada.
-30 dengan menghapus spasi dan -1 dengan mengubah
b%i==0
keb%i<1
sumber
1
Perl 6 , 25 byte
Bagaimana itu bekerja
Perl 6 , 32 byte
Dengan pengujian kebiasaan primitif yang tidak efisien.
Bagaimana itu bekerja
Struktur luar sama dengan di atas, tetapi predikat yang diteruskan ke
first
(untuk memutuskan apakah angka yang diberikan adalah prima), sekarang:sumber
.is-prime
;)Pyke,
87 byteCoba di sini!
4 byte, tidak bersaing
(Penerjemah diperbarui sejak tantangan diposting)
Coba di sini!
sumber
J, 4 byte
Sederhana dibangun untuk perdana berikutnya.
sumber
05AB1E ,
1613 byte (Emigna @ -3 byte)Cobalah online!
sumber
[>Dp#
bekerjaPerl, 30 byte (29 +1 untuk
-p
):Pemakaian
Masukkan nomor setelah menekan kembali (input 12345 pada contoh di bawah, output 12347):
Bagaimana itu bekerja
1
yang memiliki panjang++$_
, di mana$_
awalnya nilai input1
s adalah panjang non-prima (dijelaskan di sini ).++$_
)while
loop implisit keluar dan-p
mencetak nilai$_
"1"
panjang 1 karena tidak akan pernah digunakan untuk nilai kurang dari1
, sesuai spesifikasi.sumber
Java 7,
373343334303268 byte-75 byte terima kasih @Poke
Tidak Disatukan:
Coba di sini.
Beberapa contoh input / output:
sumber
static
bidang dan metodep
, tetapi menghapus metodec
danp
parameter.QBIC , 34 byte
Didasarkan pada penguji primitif QBIC ini . Penjelasan:
sumber
JavaScript (ES7), 61 byte
Pemakaian
Keluaran
sumber
MATL, 3 byte
Fungsi
Yq
mengembalikan prime berikutnya dari nilai absolut input jika input negatif sehingga kami secara implisit mengambil input, meniadakannya (_
) dan menemukan prime berikutnya menggunakanYq
.Cobalah secara Online!
sumber
Haskell,
424643 bytekode biasa untuk brute force.
Tentu saja ini menemukan bilangan prima terkecil berikutnya setelahnya
n
. Tidak ada prime terbesar.Bekerja untuk n > 0 .
sunting: Asumsinya
n
prima. Terima kasih atas saran @Laikoni di komentar .sumber
head[...]
dengan[...]!!0
. Namun saya pikir orang dapat berasumsi bahwan
itu prima, jadi Anda dapat menggunakan[n..]
alih-alih[n+1..]
dan kemudian mengambil elemen kedua[...]!!1
.SimpleTemplate, 132 byte
Algoritma itu mengerikan, karena saya harus melakukan kode saya sendiri untuk memeriksa apakah suatu bilangan prima atau tidak.
Itu terbukti mengerikan, tetapi berhasil.
Menerima nomor sebagai argumen pertama, mengeluarkan hasilnya.
Tidak Disatukan:
Adakah tips tentang cara menghapus yang terakhir
@if
?sumber
Lua, 876 Bytes
Lua, tidak seperti beberapa bahasa lain, memang memiliki Ukuran Integer Maksimal. Setelah angka menjadi lebih besar dari 2 32 , hal-hal berhenti berfungsi dengan benar, dan Lua mulai mencoba membuat estimasi, bukan nilai yang tepat.
Karena itu, saya harus menerapkan metode baru untuk menyimpan angka, khususnya, saya telah menyimpannya sebagai string Base10, karena Lua tidak memiliki batas ukuran pada String, selain dari ukuran memori.
Saya merasa jawaban ini lebih ke Roh pertanyaan, karena harus menerapkan bilangan bulat presisi sewenang-wenang, serta ujian utama.
Dijelaskan
Meskipun di atas menggunakan Metatables, bukan hanya fungsi biasa seperti jawaban yang sebenarnya, yang bekerja lebih kecil.
sumber
Ruby, 28 + 6 = 34 byte
Menggunakan
-rprime
bendera.Versi non-rekursif untuk 31 + 6 = 37 byte:
sumber
Python + primefac ,
3432 byteTidak sesingkat menggunakan
sympy
(jawaban lain sudah menggunakan itu), tetapi masih cukup pendek, dan itu jauh lebih cepat.Cobalah online
Input
2**2000
selesai dalam beberapa detik.sumber
Japt, 6 byte
Jalankan secara online.
sumber