Я столкнулся с проблемой из простого алгоритма. Вопрос ниже:
Описание проблемы Рекурсивная формула последовательности Фибоначчи: Fn = Fn-1 + Fn-2, где F1 = F2 = 1.
Когда n большое, Fn также очень большой, и теперь мы хотим знать, что является остатком Fn после 10007.
Формат ввода
Вход содержит целое число n.
Формат вывода
Выходная строка содержит целое число, представляющее остаток от Fn, деленный на 10007.
Пример ввода 10 Пример вывода
55
Пример ввода 22 Пример вывода
7704
Размер данных и условные обозначения 1 <= n <= 1 000 000. </p>
Мое решение приведено ниже:
import java.util.Scanner;
/ ** * * / publi c class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
System.out.println(recurrence(n));
in.close();
}
/**
*
* @param n
* @return
*/
public static int recurrence(int n) {
int f1 = 1;
int f2 = 1;
int temp = f1;
for (int i = 1; i <= n - 2; i++) {
temp = (f1 + f2)%10007;
f1 = f2;
f2 = temp;
}
return temp;
}
}
Решение выше верное. Но я хочу сказать, что в следующем решении есть проблема.
public static int recurrence(int n) {
int f1 = 1;
int f2 = 1;
int temp = f1;
for (int i = 1; i <= n - 2; i++) {
f1 %= 10007;
f2 %= 10007;
temp = f1 + f2;
f1 = f2;
f2 = temp;
}
return temp;
}
- это не temp = (f1+f2)%10007
так же, как f1 %= 10007; f2 %= 10007; temp = f1 + f2;
?
Мой английский sh беден, надеюсь, вы, ребята, могу понять, что я имею в виду Спасибо!