Числа Фибоначчи. Не проходит 6 тест на acmp

194
10 декабря 2019, 21:00

Последовательностью Фибоначчи называется последовательность чисел F0 = 0, F1 = 1, … , Fk = Fk-1 + Fk-2 (k > 1). Требуется найти наибольший общий делитель двух чисел Фибоначчи.

Входные данные Во входном файле INPUT.TXT записаны два целых числа i и j (1 ≤ i, j ≤ 10^6).

Выходные данные В выходной файл OUTPUT.TXT выведите остаток от деления НОД чисел Fi и Fj на 10^9.

Вот мой код:

#include <fstream>
using namespace std;
long double nod(long double a, long double b)
{
    if (a == b) {
        return a;
    }
    if (a > b) {
        long double tmp = a;
        a = b;
        b = tmp;
    }
    return nod(a, b - a);
}
long double fib(int n)
{
    double a = 0.0;
    double b = 1.0;
    double temp = 0.0;
    for (int i = 0; i < n; i++)
    {
        temp = b;
        b += a;
        a = temp;
    }
    return a;
}
int main()
{
    int i, j; // вводимые числа
    ifstream fin;
    fin.open("INPUT.TXT");
    fin >> i >> j;
    fin.close();
    long double Fi = fib(i); // число Фибоначчи от i
    long double Fj = fib(j); // число Фибоначчи от j
    ofstream fout;
    fout.open("OUTPUT.TXT");
    fout << fmod(nod(Fi, Fj), 1000000000); //остаток от деления НОД чисел Fi и Fj на 10^9
    fout.close();
    return 0;
}
Answer 1

Итак, еще раз - смотрим в Википедию и видим:

Значит, нам нужно найти НОД для чисел i и j из условия, после чего найти соответствующее число Фибоначчи по модулю 1000000000. Все.

#include <iostream>
using namespace std;
// Поиск НОД
int gcd(int m, int n)
{
    while(m && n) if (m < n) n %= m; else m %= n;
    return m + n;
}
int main()
{
    int i, j, f0 = 0, f1 = 1;
    cin >> i >> j;                 // Считали i, j
    for(i = gcd(i,j); i > 0; --i)  // Ищем нужное число...
    {
        int f = (f0+f1)%1000000000;// ... по модулю 1000000000!!
        f0 = f1;
        f1 = f;
    }
    cout << f0 << endl;       // Собственно, всё.
}
READ ALSO
Регистрация DLL библиотеки

Регистрация DLL библиотеки

При попытке регистрации библиотеки выдаёт

188
Не работает клиент сокет Java Android Studio

Не работает клиент сокет Java Android Studio

Написал простой сервер с помощью сокетовЕго цель принимать данные от пользователя и отправлять их обратно Клиент я написал в Android Studio, прием-передача...

224
Как правильно писать аргументы к методу Main в Java

Как правильно писать аргументы к методу Main в Java

Как правильно писать аргументы к методу Main? Мой друг изучает java и пишет public static void Main(String args[]), хотя я пишу public static void Main(String[] args) (но на C#)Не можем...

222