Pagini recente » Cod sursa (job #2683386) | Infoarena Monthly 2014 - Clasament | Cod sursa (job #1039729) | Cod sursa (job #2028890) | Cod sursa (job #1318484)
#include<fstream>
#include<cmath>
using namespace std;
typedef int64_t var;
ifstream fin("kfib.in");
ofstream fout("kfib.out");
const var MOD = 666013;
//MATRICEA ESTE:
/*
| 1 1 |
| 1 0 |
*/
var KEY[2][2] = {{1, 1}, {1, 0}}, RES[2][2] = {{1, 0}, {0, 1}};
var r1, r2, r3, r4;
void inmult(var K[2][2], var L[2][2], var R[2][2]) {
r1 = K[0][0]*L[0][0] + K[0][1]*L[1][0];
r2 = K[0][0]*L[0][1] + K[0][1]*L[1][1];
r3 = K[1][0]*L[0][0] + K[1][1]*L[1][0];
r4 = K[1][0]*L[0][1] + K[1][1]*L[1][1];
r1 %= MOD; r2 %= MOD; r3 %= MOD; r4 %= MOD;
R[0][0] = r1; R[0][1] = r2;
R[1][0] = r3; R[1][1] = r4;
}
void pow(var K[2][2], var n) {
while(n) {
if(n%2) {
inmult(K, RES, RES);
n --;
}
else {
inmult(K, K, K);
n /= 2;
}
}
}
int main() {
var K;
fin>>K;
pow(KEY, K-1);
fout<<( RES[1][0] + RES[1][1] ) % MOD;
}