Julia, 79 bytes
!k=any(i->√(5i^2+[4,-4])%1∋k%i<!(k÷i),2:k)^~-k
<|(n,k=1)=n>0?n-!k<|-~k:~-k
Pruébalo en línea!
Fondo
En Problemas y soluciones avanzadas, H-187: Fibonacci es un cuadrado , el proponente muestra que

donde L n denota el n º número Lucas , y que - por el contrario - si

entonces n es un número de Fibonacci ym es un número de Lucas.
Cómo funciona
Definimos el operador binario <|
para nuestros propósitos. No está definido en las versiones recientes de Julia, pero el analizador aún lo reconoce como operador.
Cuando se llama con un solo argumento ( n ), <|
inicializa k como 1 . Mientras que n es positivo, resta ! K ( 1 si k es un producto de los números de Fibonacci, 0 si no) de n y recursivamente se llama a sí mismo, incrementa k en 1 . Una vez que n alcanza 0 , se ha encontrado la cantidad deseada de productos, por lo que <|
devuelve el valor anterior de k , es decir, ~ -k = k - 1 .
El operador unario !
, redefinido como una prueba para productos de número de Fibonacci, logra su tarea de la siguiente manera.
Si k = 1 , k es un producto de los números de Fibonacci. En este caso, elevamos el valor de retorno de any(...)
a la potencia ~ -k = k - 1 = 0 , por lo que el resultado será 1 .
Si k> 1 , el resultado será el valor de any(....)
, que devolverá verdadero si y solo si el predicado √(5i^2+[4,-4])%1∋k%i<!(k÷i)
devuelve verdadero para algún entero i tal que 2 ≤ i ≤ k .
Las condiciones encadenadas en el predicado se mantienen si k%i
pertenece √(5i^2+[4,-4])%1
y k%i
es menor que !(k÷i)
.
√(5i^2+[4,-4])%1
toma la raíz cuadrada de 5i 2 + 4 y 5i 2 - 4 y calcula sus residuos módulo 1 . Cada módulo es 0 si el número correspondiente es un cuadrado perfecto y, de lo contrario , un número positivo menor que 1 .
Como k%i
devuelve un número entero, solo puede pertenecer a la matriz de módulos si k% i = 0 (es decir, k es divisible por i ) y al menos uno entre 5i 2 + 4 y 5i 2 - 4 es un cuadrado perfecto (es decir, i es un número de Fibonacci).
!(k÷i)
llama recursivamente a 1 con el argumento k ÷ i (división entera), que será mayor que 0 si y solo si k ÷ i es un producto de los números de Fibonacci.
Por inducción ,! Tiene la propiedad deseada.
7
no se puede expresar como el producto de los números de Fibonacci. Por lo tanto, el1
número requerido de st es1
, el2
nd es2
, ..., el6
th es6
, pero el7
th es8
.corresponding product
" es solo para aclarar. Su código solo necesita generar el "result
".