Problema al calcular numeros muy grandes de fibonacci

Si eres principiante y tienes alguna consulta entra en este foro.
Responder
Mensaje
Autor
RabidSeamtrees
Mensajes: 2
Registrado: 15/04/2019 4:48 pm

Problema al calcular numeros muy grandes de fibonacci

#1 Mensaje por RabidSeamtrees » 15/04/2019 5:05 pm

Hola, tengo una pregunta sobre como resolver el siguiente problema:

Calculando numeros de fibonacci

Descripción
La serie de fibonacci comienza con 1,1 y a partir de ahí cada número siguiente es la suma de los 2 números anteriores, de la forma siguiente: 1,1,2,3,5,8,13,21,...
Se te pide encontrar el residuo del termino N de fibonacci al ser dividido entre 2017.

Entrada
un solo numero N.

Salida
El residuo del termino N de fibonacci al ser dividido entre 2017.

Limites
0<N>2^31

Mi código es el siguiente:

Código: Seleccionar todo

#include <iostream>
#include <bits/stdc++.h>

using namespace std;

long long A,B;
double Respuesta;

int main()
{
    cin>>A;

    Respuesta=(1/sqrt(5))*(pow(((1+sqrt(5))/2),A)-(pow(((1-sqrt(5))/2),A)));
    B=Respuesta;
    cout<<B%2017;
}
Mi problema es al momento que N es realmente grande ya que únicamente muestra en pantalla -691 cuando N es mayor de 92 y no tengo idea de como solucionarlo,
con una N menor de 92 no tengo problema alguno.

mollok
Mensajes: 413
Registrado: 30/01/2018 9:47 am
Ubicación: Mallorca, España

Re: Problema al calcular numeros muy grandes de fibonacci

#2 Mensaje por mollok » 16/04/2019 3:56 am

En vez de usar % usa la función fmod. El primero es para enteros, la función para coma flotante.
while(is_alive(yourself)) {
    make_true(yourself, yourdreams);
}

RabidSeamtrees
Mensajes: 2
Registrado: 15/04/2019 4:48 pm

Re: Problema al calcular numeros muy grandes de fibonacci

#3 Mensaje por RabidSeamtrees » 16/04/2019 10:00 am

mollok escribió:
16/04/2019 3:56 am
En vez de usar % usa la función fmod. El primero es para enteros, la función para coma flotante.
Hola, intente aplicar la función fmod como en el código siguiente:

Código: Seleccionar todo

#include <iostream>
#include <bits/stdc++.h>

using namespace std;

long long A;
long double Respuesta,AUX1;

int main()
{
    cin>>A;
    
    Respuesta=fmod((1/sqrt(5))*(pow(((1+sqrt(5))/2),A)-(pow(((1-sqrt(5))/2),A))),2017);
    cout<<Respuesta;
}
Funciona perfectamente hasta el caso donde N<=1474, pero cuando es mayor dice "NAN" por lo que tengo entendido significa "Not A Number" y no tengo idea alguna de como solucionarlo.

mollok
Mensajes: 413
Registrado: 30/01/2018 9:47 am
Ubicación: Mallorca, España

Re: Problema al calcular numeros muy grandes de fibonacci

#4 Mensaje por mollok » 16/04/2019 11:25 am

El número de fibonaccio que pides es demasiado grande cómo para ser alojado a los tipos básicos de C++, tal vez llegue a los centenares e incluso miles de dígitos por número. Hay una en C++ llamada BigInt que permite números enteros de cualquier tamaño, mientras te aguante la memoria. Deberías probar eso.
while(is_alive(yourself)) {
    make_true(yourself, yourdreams);
}

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: Bing [Bot] y 8 invitados