Pagini recente » Cod sursa (job #1214791) | Cod sursa (job #2262664) | Cod sursa (job #1569064) | Cod sursa (job #3342150) | Cod sursa (job #3351190)
// https://infoarena.ro/problema/kfib
#include<fstream>
using namespace std;
#define MODULO 666013
ifstream fin("kfib.in");
ofstream fout("kfib.out");
int main() {
int k;
// a = F(n-2), b = F(n-1), c = F(n)
// voi memora doar ultimele doua valori ale sirului, pentru ca doar de ele am nevoie
// astfel, reduc memoria utilizata
int a, b, c;
fin >> k;
if(k == 0) {
// termenul 0 fibonacci
fout << 0 << endl;
} else if(k == 1) {
// termenul 1 fibonacci
fout << 1 << endl;
} else {
a = 0;
b = 1;
// calculez iterativ termenii fiboncacci pana la F(k)
for(int i = 2; i <= k; i++) {
// calculez termenul curent F(i) = F(i - 2) + F(i - 1)
c = (a + b) % MODULO;
// pregatesc pasul urmator:
// F(i - 2) devine F(i - 1)
// F(i - 1) devine F(i)
// la pasul urmator voi calcula F(i + 1) = F(i - 1) + F(i)
a = b;
b = c;
}
fout << c << endl;
}
fin.close();
fout.close();
return 0;
}