Tantangannya agak sederhana:
- Ambil bilangan bulat positif
n
sebagai masukan. - Keluarkan
n
angka utama Fibonacci.
Input dapat sebagai parameter untuk suatu fungsi (dan output akan menjadi nilai balik), atau dapat diambil dari baris perintah (dan dikeluarkan di sana).
Catatan: Menggunakan fungsi pengecekan bawaan atau generator seri Fibonacci tidak diperbolehkan.
Semoga berhasil!
Jawaban:
Ruby, 55
Panggilan sendiri secara rekursif, melacak dua angka terakhir dalam urutan Fibonacci di
a
danb
, dan berapa banyak bilangan prima yang dilihatnya sejauh inin
.n
akan dikurangi ketika faktor terkecil lebih besar dari 1b
, dibagi denganb
dan dibulatkan ke bilangan bulat terdekat, adalah 1 daripada 0, yang terjadi hanya untuk primeb
. Ketika itu terlihat semua bilangan prima yang seharusnya, itu mencetaka
, yang merupakan yang paling barub
diuji untuk primality.sumber
C, 66
f(n,a,b){int i=2;while(a%i&&i++<a);return(n-=i==a)?f(n,b,a+b):a;}
sumber
a
danb
di dalam fungsi Anda.f(n,a,b){int i=2;while(a%i&&i++<a);return(n-=i==a)?f(n,b,a+b):a;}
- @ArtemIce:a
= 1 danb
= 2 bekerja untuk saya.g(n){f(n,1,2);}
?C,
85,81, 76meminjam gaya kode cek bilangan prima sederhana dari @Gautam
fungsi C mandiri (tidak ada global)
Pengujian:
sumber
Mathematica, 59 atau 63 byte
Ini adalah fungsi yang tidak disebutkan namanya yang mengambil
n
input mereka dan mengembalikan prime Fibonacci yang benar. Versi yang lebih pendek menggunakanDivisors
. Saya tidak sepenuhnya yakin apakah ini diperbolehkan, tetapi jawaban Mathematica lainnya bahkan digunakanFactorInteger
.Yang kedua tidak menggunakan fungsi-fungsi terkait factorisation sama sekali, melainkan menghitung jumlah bilangan bulat lebih kecil dari
n
yang menghasilkan0
dalam operasi modulo. Bahkan versi ini mengalahkan semua pengiriman yang valid, tetapi saya yakin hanya memposting jawaban ini akan menyebabkan beberapa orang memberikan jawaban kompetitif dalam GolfScript, APL atau J.;)sumber
Mathematica
147 143141 141 karakterf
adalah definisi berulang dari angka Fibonacci.q
mendeteksi bilangan prima.k
adalah Fibonacci prime iffq@f@k
Benar.Untuk
n
= 10, output adalah433494437
.sumber
Ruby,
94 6867Clojure, 112
Tidak Disatukan:
Golf:
(defn q[n](nth(filter(fn[x](every? #(>(rem x %)0)(range 2 x)))((fn z[a b](lazy-seq(cons a(z b(+ a b)))))2 3))n))
sumber
Haskell 108
Untuk mendapatkan
n
nomor panggil sajafp !! n
.EDIT: Sic. Jawaban yang salah, saya memperbaikinya.
sumber
Groovy: 105 (134 dengan spasi putih)
b
adalah fungsi fibonacci.penutupan di dalam if adalah fungsi pemeriksaan prima. Perbarui: perbaikan kecil di atasnya
r
adalah nomor fibonacci utama.Kasus uji:
Versi yang dapat dibaca:
sumber
C, 105 (dengan spasi)
Implementasi fibonacci menggunakan pemrograman dinamis:
Kode yang dapat dibaca:
sumber
Pyth - 29 byte
Loops Fibonacci hingga array adalah panjang n tetapi hanya menambah array jika prime.
Agak lambat, tetapi mencapai n = 10 dalam ~ 15 detik. Mungkin bisa bermain golf lebih banyak.
Penafian: Pyth lebih baru dari tantangan ini, jadi tidak bersaing.sumber
Javascript:
sumber