Cod sursa(job #2499686)

Utilizator radustn92Radu Stancu radustn92 Data 26 noiembrie 2019 17:23:35
Problema Al k-lea termen Fibonacci Scor 75
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.68 kb
#include <cstdio>
#include <vector>
#include <string>
#include <vector>
using namespace std;
const int MOD = 666013;

int N;

pair<int, int> getFibN(int N) {
	if (N == 0) {
		return {0, 1};
	}

	pair<int, int> fibNDiv2 = getFibN(N >> 1);
	int fib2N = (1LL * fibNDiv2.first * (fibNDiv2.second - fibNDiv2.first + fibNDiv2.second)) % MOD;
	int fib2NPlus1 = (1LL * fibNDiv2.first * fibNDiv2.first + 1LL * fibNDiv2.second * fibNDiv2.second) % MOD;

	if (N & 1) {
		return {fib2NPlus1, (fib2N + fib2NPlus1) % MOD};
	}
	return {fib2N, fib2NPlus1};
}

int main() {
	freopen("kfib.in", "r", stdin);
	freopen("kfib.out", "w", stdout);

	scanf("%d", &N);
	printf("%d\n", getFibN(N).first);
	return 0;
}