Pagini recente » Cod sursa (job #204496) | Cod sursa (job #351328) | Cod sursa (job #848271) | Cod sursa (job #2857444) | Cod sursa (job #1808438)
#include <fstream>
using namespace std;
const int MOD = 666013;
struct MAT //Matrice patratica de ordin 2, simetrica
{
long long a11, a12, a22;
};
ifstream f("kfib.in");
ofstream g("kfib.out");
void mul(MAT &A, MAT &B) // A <-- A*B
{
long long x = A.a11 * B.a11 + A.a12 * B.a12;
long long y = A.a11 * B.a12 + A.a12 * B.a22;
long long z = A.a12 * B.a12 + A.a22 * B.a22;
A.a11 = x % MOD;
A.a12 = y % MOD;
A.a22 = z % MOD;
}
int putere(int n)
{
MAT A = {0, 1, 1}, P = {1, 0, 1};
while(n > 0)
{
while(n % 2 == 0)
{
mul(A, A);
n /= 2;
}
mul(P, A);
n--;
}
return P.a22;
}
int main()
{
int K;
f >> K;
if(K > 0)
g << putere(K - 1);
else
g << '0';
f.close();
g.close();
return 0;
}