Cod sursa(job #2333991)

Utilizator andreigasparoviciAndrei Gasparovici andreigasparovici Data 2 februarie 2019 10:11:16
Problema Al k-lea termen Fibonacci Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.7 kb
#include <fstream>
const int MOD = 666013;

std::ifstream in("kfib.in");
std::ofstream out("kfib.out");


void atrib(int a[2][2], int b[2][2]) {
	for (int i = 0; i < 2; ++i)
		for (int j = 0; j < 2; ++j)
			a[i][j] = b[i][j];
}

void produs(int a[2][2], int b[2][2]) {
	int c[2][2] = {0};
	for (int i = 0; i < 2; ++i)
		for (int j = 0; j < 2; ++j)
			for (int k = 0; k < 2; ++k)
				c[i][j] = (c[i][j] + 1LL * a[i][k] * b[k][j]) % MOD;
	atrib(a, c);
}

void putere(int a[2][2], int p) {
	int res[2][2];
	atrib(res, a);
	--p;

	for (; p; p >>= 1) {
		if (p & 1)
			produs(res, a);
		produs(a, a);
	}

	atrib(a, res);
}


int main() {
	int k;
	in >> k;
	int M[2][2] = {{1,1},{1,0}};
	putere(M, k - 1);
	out << M[0][0];
}