Pagini recente » Cod sursa (job #1539283) | Cod sursa (job #143949) | Cod sursa (job #1832352) | Cod sursa (job #2765009) | Cod sursa (job #1399846)
#include <fstream>
#include <cstring>
#define MOD 666013
using namespace std;
ifstream is("kfib.in");
ofstream os("kfib.out");
int n;
int M[3][3], S[3][3];
inline void Inmulteste(int a[][3],int b[][3], int c[][3])
{
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;
}
void Lgput(int p, int O[][3])
{
int C[3][3];
int AUX[3][3];
memcpy(C, M, sizeof(M));
O[0][0] = O[1][1] = 1;
for(int i = 0; (1 << i) <= p; ++i)
{
if(p & (1 << i))
{
memset(AUX, 0, sizeof(AUX));
Inmulteste(O, C, AUX);
memcpy(O, AUX, sizeof(AUX));
}
memset(AUX, 0, sizeof(AUX));
Inmulteste(C, C, AUX);
memcpy(C, AUX, sizeof(C));
}
}
int main()
{
is >> n;
M[0][0] = 0;
M[0][1] = 1;
M[1][0] = 1;
M[1][1] = 1;
Lgput(n - 1, S);
os << S[1][1];
is.close();
os.close();
return 0;
}