Pagini recente » Cod sursa (job #1684226) | Cod sursa (job #1583971) | Cod sursa (job #1718342) | Cod sursa (job #2207560) | Cod sursa (job #2227680)
#include <fstream>
using namespace std;
ifstream inputfile("kfib.in");
ofstream outputfile("kfib.out");
long long number, valueX, valueY, answer = 1, matrix[2][2], finalMatrix[2][2], B[2][2], C[2][2], D[1][2], E[1][2];
long long mod = 199973;
// functie pentru inmultirea matricelor
void multiplication(long long A[][2], long long B[][2], long long C[][2]) {
int i, j, k;
for (i = 1; i <= 2; i++)
for (j = 1; j <= 2; j++)
for (k = 1; k <= 2; k++)
C[i][j] = (C[i][j] + 1LL * A[i][k] * B[k][j]) % mod;
}
int main() {
valueX = 1;
valueY = 1;
D[1][1] = valueX;
D[1][2] = valueY;
matrix[1][1] = 0;
matrix[1][2] = 1;
matrix[2][1] = 1;
matrix[2][2] = 1;
B[1][1] = 0;
B[1][2] = 1;
B[2][1] = 1;
B[2][2] = 1;
finalMatrix[1][1] = 0;
finalMatrix[1][2] = 0;
finalMatrix[2][1] = 0;
finalMatrix[2][2] = 0;
inputfile >> number;
for(int i = 1; i < number - 2; i++)
{
multiplication(B, matrix, finalMatrix);
B[1][1] = finalMatrix [1][1];
B[1][2] = finalMatrix [1][2];
B[2][1] = finalMatrix [2][1];
B[2][2] = finalMatrix [2][2];
C[1][1] = finalMatrix [1][1];
C[1][2] = finalMatrix[1][2];
C[2][1] = finalMatrix[2][1];
C[2][2] = finalMatrix[2][2];
finalMatrix[1][1] = 0;
finalMatrix[1][2] = 0;
finalMatrix[2][1] = 0;
finalMatrix[2][2] = 0;
}
multiplication(D,C,E);
outputfile << E[1][2]<<"\n";
return 0;
}