Tulis program yang meminta pengguna untuk bilangan bulat lebih besar dari 2.
Dengan dugaan Goldbach bahwa setiap bilangan bulat bahkan lebih besar dari 2 dapat dinyatakan sebagai jumlah dari dua bilangan prima, cetak dua bilangan prima yang, ketika ditambahkan bersama, memberikan bilangan genap yang diminta. Sunting: program hanya perlu mencetak SEPASANG prima, tidak semua. Sebagai contoh:
4: 2 + 2
6: 3 + 3
8: 3 + 5
10: 5 + 5 atau 3 + 7
Jawaban:
APL, 34 atau 44 byte
Versi pertama panjangnya 34 simbol dan terbatas pada karakter dari rangkaian karakter APL byte tunggal asli, seperti yang masih didukung di Dyalog APL:
Penjelasan:
Versi kedua hanya 22 simbol, karena mengeksploitasi
π
fungsi untuk memeriksa bilangan prima, tetapi itu hanya tersedia di NARS2000 yang menggunakan Unicode, sehingga jumlah byte 44 di UCS-2:Penjelasan:
Contohnya
(⎕: adalah prompt yang meminta nomor)
sumber
¯2π⍳2πn
berfungsi sebagai generator utama?π
tepatnya yang dilakukan operator?π
switch dengan⍺
:¯2πx
menghitung perdana xth,¯1πx
adalah perdana pertama kurang dari x,0πx
tes x untuk primality,1πx
adalah lebih besar perdana pertama dari x,2πx
adalah jumlah bilangan prima kurang dari x,10πx
adalah jumlah pembagi dari x,11πx
adalah jumlah yang dari semua pembagi x,12πx
dan13πx
masing-masing adalah fungsi Möbius dan totient. Terakhir, monadikπx
mengembalikan faktorisasi utama x.Python 2,
7571 byteUji di Ideone .
Bagaimana itu bekerja
Kami menggunakan akibat wajar dari teorema Wilson :
Setiap saat, variabel m sama dengan kuadrat faktorial dari k - 1 ; k dimulai pada nilai 1 dan m pada nilai 0! ² = 1 . Set p akan terdiri dari 0 dan semua bilangan prima hingga nilai saat ini k .
Dalam setiap iterasi, pertama kita periksa apakah n - k dan k milik p , yang benar jika dan hanya jika perbedaan set {nk, k} dan p kosong. Jika ya, kondisinya salah dan loop berlanjut.
Perhatikan bahwa k> 0 , dan {n - k, k} akan memenuhi kondisi untuk beberapa nilai positif n - k (dengan asumsi dugaan Goldbach benar), sehingga 0 dalam p tidak akan mengarah ke positif palsu.
Dalam loop, kami memperbarui k dan m . Nilai baru m adalah m × k² = (k - 1)! ² × k² = k! ² , dan nilai baru k adalah k + 1 , jadi m = (k - 1)! ² masih berlaku sebelum dan sesudah pembaruan.
Kemudian, kami melakukan set union untuk menambahkan nilai m% k × k ke p . Dengan akibat teorema Wilson, ini akan menambah 1 × k = k jika k adalah prima dan 0 × k = 0 jika tidak.
Ketika loop berakhir, kita mencetak nilai terakhir dari n - k dan k , yang akan menjadi bilangan prima dengan jumlah n .
sumber
Ruby 2.0 (65)
sumber
PHP - 73 byte
Input diambil sebagai argumen baris perintah.
Penggunaan sampel:
sumber
GolfScript
413332Menerima argumen baris perintah misalnya
Temukan semua partisi nomor input yang relevan dengan:
dan kemudian menemukan partisi pertama di mana tidak ada angka yang TIDAK prima dengan:
di mana blok pemeriksaan komposit
np
adalah:blok ini memfilter ke semua angka yang membagi angka secara merata. Jika tidak ada angka seperti itu (jadi nomornya adalah prima), hasilnya adalah
[]
, yang merupakan falsey di GolfScript.sumber
perl 6: 69
sumber
R,
17011283 karakterBertakuk:
Pemakaian:
Solusi lama pada 112 karakter, untuk anak cucu
Bertakuk:
sumber
Python - 107
Pada dasarnya perbaikan pada bagian kedua dari jawaban nutria (saya menjalankan ini pada 2,7 tapi saya pikir itu juga harus bekerja untuk 3.x)
sumber
:
wajib?JavaScript (ES6) (Regex), 105
Sekarang Anda memiliki regex yang menguji dugaan Goldbach, yang memiliki persyaratan rendah pada fitur-fitur khusus (dukungan referensi-belakang dasar, pandangan ke depan yang positif dan negatif).
Ini menggunakan
String.prototype.repeat()
, yang merupakan bagian dari proposal edisi 6 EcmaScript. Saat ini, kode ini hanya berfungsi di Firefox.Saya benar-benar membutuhkan bahasa yang lebih baik yang memiliki perintah singkat ketika bekerja dengan regex ...
sumber
Scala,
286192172148 karakterBukan yang tercepat tetapi berhasil. Panggil g (10) untuk mendapatkan daftar pasangan goldbach untuk 10.
Konversi ke C ++ mudah.
sumber
C -
139129 karaktersumber
int
deklarasi di fungsi Andai
. Anda dapat menyimpan 2 karakter lainnya dengan menghapusif
dan menambahkan double ampersand lainnya:i(b,2)&&i(a-b,2)&&printf(...)
&&
. (Saya tidak akan terbiasa dengan tipe argumen pembungkaman ...)newLISP -
169148 karaktertermasuk kode untuk menjalankannya. Hasilnya terlalu murah hati ...
sumber
Sage, 60
Serupa dalam skor dan merasa untuk solusi res , tapi saya pikir itu cukup berbeda untuk dikirim.
sumber
Sage ,
6562Dengan file di atas
goldbach.sage
, jalankan dengan Sage berjalan di terminal:Terima kasih kepada @boothby untuk
p=is_prime
idenya.sumber
p=is_prime
.Haskell, 97C
Penjelasan:
g
adalah fungsi "goldbach". Memanggilg n
memberi Anda sepasang bilangan prima yang menambahkan hinggan
.p
adalah fungsi yang menghasilkan daftar bilangan prima kurang darin
.c
adalah fungsi pemeriksa utama yang digunakan untuk mendefinisikanp
.Contoh berjalan:
sumber
Mathematica 56
Ini mengembalikan semua solusi untuk integer input.
Misalnya, ketika 1298 dimasukkan ...
Seperti yang tertulis, ini mengembalikan setiap solusi dua kali.
sumber
Julia, 62 Chars (85 dengan cepat)
sumber
g(int(readline(STDIN)))
GTB , 31
Untuk Kalkulator TI-84 Anda
Tidak ada bawaan bawaan.
Contoh berjalan
sumber
JavaScript,
139137136sumber
return;
bukannyareturn 0;
Python 3 -
150143 karakterVersi lama (150 karakter):
Versi baru (terima kasih kepada ProgramFOX):
Mencetak setiap kombinasi, misalnya:
4 2 + 2
10 7 + 3 5 + 5 3 + 7
sumber
|
dapat dengan aman digunakan dengan tipe boolean, jadi(a+b!=n)|p(a)|p(b)
print([(a,b)for b in range(2,n)for a in range(2,n)if not((a+b!=n)|p(a)|p(b))])
(mencetak daftar tupel, yang jumlahnya adalah n). Menghemat 8 byte.r=range(2,n)
dan referensir
menyimpan beberapa lagi.q [116 karakter]
Tidak ada fungsi bawaan untuk menemukan bilangan prima.
Memasukkan
Keluaran
sumber
Python - 206
Sedikit terlambat ke pesta tetapi saya melatih keterampilan bermain golf saya.
Saya sebenarnya mengkodekan ini sebelum saya menemukan pertanyaan ini! Jadi milikku tidak termasuk lambda indah yang digunakan solusi Python lainnya.
sumber
J -
3532 char"Prompt the user" adalah kutukan bagi setiap pegolf J. Ada semua karakter saya yang didapat dengan susah payah!
Dijelaskan:
".1!:1]1
- Baca dalam string (1!:1
) dari input (menangani file1
) dan mengubahnya menjadi angka (".
).p:i.n=:
- Tetapkan nomor ini ke variabeln
, dan kemudian ambiln
bilangan prima pertama .+/~
- Buat tabel tambahan,n
lebar dann
tinggi.i.&n,
- Ubah tabel menjadi satu daftar, dan kemudian temukan indeks kemunculan pertaman
, yang ada jika dugaan Goldbach benar.p:(n,n)#:
- Ambil baris dan kolom dari indeks, dan ambil bilangan prima yang sesuai.Pemakaian:
Seandainya prompt tidak menjadi persyaratan, inilah kata kerja 25 karakter:
sumber
Jelly , 8 byte (tidak bersaing)
Cobalah online! atau verifikasi semua kasus uji .
Bagaimana itu bekerja
sumber
Julia,
5049 byteCobalah online!
Jika suatu fungsi dapat diterima, kode tersebut dapat disingkat menjadi 32 byte :
Bagaimana itu bekerja
~=primes
membuat alias untuk fungsi bilangan prima bawaan yang mengembalikan daftar semua bilangan prima hingga argumennya.n=ARGS[]|>int
mem-parsing argumen baris perintah pertama saat menyimpannya dalam n .Untuk menemukan pasangan bilangan prima yang sesuai, pertama-tama kita menghitung kisaran prime yang disebutkan sebelumnya
~n
. Kemudian,n-~n
hasilkan semua perbedaan bilangan prima dan n ini .Dengan memotong (
∩
) hasil dengan rentang prima itu sendiri, kami memastikan bahwa bilangan prima p tersisa sedemikian rupa n - p juga bilangan prima.Akhirnya,
extrema
ambil prime terendah dan tertinggi di persimpangan, sehingga jumlah mereka harus n .sumber
SQL,
295284Dalam postgresql:
Seharusnya bisa melakukannya di setengah ruang, jika itu bukan untuk hal-hal seperti "tidak ada bagian luar yang bergabung dalam rekursi", "tidak ada subquery dalam rekursi" ...
Inilah hasilnya:
sumber
Gelombang - 266
Ditata dengan rapi -
sumber
Perl 5, 58 byte
57, ditambah 1 untuk
-nE
Input dan output berada di unary. Contoh:
Topi-tip
sumber
Oracle SQL 11.2, 202 byte
Tidak bermain golf
sumber
Python 3, 107 byte
b (x) adalah tes primality untuk x, dan g (x) berulang melalui angka untuk menemukan dua bilangan prima yang cocok.
sumber