El desafío es bastante simple:
- Tome un número entero positivo
n
como entrada. - Salida del
n
número primo de Fibonacci.
La entrada puede ser como un parámetro para una función (y la salida será el valor de retorno), o puede tomarse de la línea de comando (y enviarse allí).
Nota: No se permite el uso de funciones de verificación principales integradas o generadores de la serie Fibonacci.
¡Buena suerte!
Respuestas:
Rubí, 55
Se llama de forma recursiva, haciendo un seguimiento de los dos últimos números en la secuencia de Fibonacci en
a
yb
, y con cuántos primos se ha visto hasta ahoran
.n
se decrementa cuando el factor más pequeño mayor que 1 deb
, dividido porb
y redondeado al entero más cercano, es 1 en lugar de 0, lo que ocurre solo para primob
. Cuando ve todos los números primos que se supone que debe ver, imprimea
, que es lab
prueba más reciente de primalidad.fuente
C, 66
f(n,a,b){int i=2;while(a%i&&i++<a);return(n-=i==a)?f(n,b,a+b):a;}
fuente
a
yb
dentro de su función.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 yb
= 2 funcionó para mí.g(n){f(n,1,2);}
?C,
85,81, 76estilo de código prestado de verificación simplificada de números primos de @Gautam
función C autónoma (sin globals)
Pruebas:
fuente
Mathematica, 59 o 63 bytes
Estas son funciones sin nombre que toman
n
como entrada y devuelven el primo correcto de Fibonacci. La versión más corta usaDivisors
. No estoy completamente seguro de si esto está permitido, pero la otra respuesta de Mathematica incluso lo usaFactorInteger
.El segundo no utiliza ninguna función relacionada con la factorización, sino que cuenta el número de números enteros más pequeños que los
n
que se producen0
en una operación de módulo. Incluso esta versión supera todas las presentaciones válidas, pero estoy seguro de que solo publicar esta respuesta hará que algunas personas proporcionen respuestas competitivas en GolfScript, APL o J.;)fuente
Mathematica
147 143141 caracteresf
es la definición recursiva del número de Fibonacci.q
detecta primos.k
es un primo de Fibonacci siq@f@k
es verdadero.Para
n
= 10, la salida es433494437
.fuente
Rubí,
94 6867Clojure, 112
Sin golf:
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))
fuente
Haskell 108
Para obtener el
n
número llámalofp !! n
.EDITAR: Sic. Respuesta incorrecta, lo arreglo.
fuente
Groovy: 105 (134 con espacios en blanco)
b
Es la función de Fibonacci.el cierre dentro del if es la función de verificación principal. Actualización: una pequeña solución
r
es el primer número de fibonacci.Casos de prueba:
Una versión legible:
fuente
C, 105 (con espacios)
Implementación de Fibonacci mediante programación dinámica:
Código legible:
fuente
Pyth - 29 bytes
Recorre Fibonacci en bucle hasta que la matriz tenga una longitud n, pero solo se agrega a la matriz si es primo.
Algo lento, pero alcanzó n = 10 en ~ 15 segundos. Probablemente se pueda jugar más al golf.
Descargo de responsabilidad: Pyth es más nuevo que este desafío, por lo que no compite.fuente
Javascript:
fuente