Fie șirul Fibonacci dat prin F
1
= 1
, F
2
= 1
și relația de recurență F
k
= F
k-1
+ F
k-2
, k ≥ 3
. Se consideră un număr natural N
.
Cerința
Să se scrie un program care determină numărul F
al fracțiilor diferite ireductibile subunitare, ce se pot forma utilizând primii N
termeni ai șirului Fibonacci.
Date de intrare
Fișierul de intrare fibofrac.in
conține pe prima linie numărul N
.
Date de ieșire
Fișierul de ieșire fibofrac.out
va conține pe prima linie numărul F
, cu semnificația de mai sus.
Restricții și precizări
- Pentru teste în valoare de
24
puncte,0 < N < 80
- Pentru teste în valoare de
40
puncte,0 < N < 1101
- Pentru teste în valoare de
56
puncte,0 < N < 50001
- Pentru teste în valoare de
100
puncte,0 < N < 1.000.000
- Două fracții ireductibile
a / b
șic / d
sunt diferite dacăa ≠ c
saub ≠ d
. 0 ≤ F < 2
63
Exemplul 1:
fibofrac.in
7
fibofrac.out
14
Explicație
N = 7
; Primii 7
termeni ai șirului Fibonacci sunt: 1
, 1
, 2
, 3
, 5
, 8
, 13
. Se pot forma 14
fracții diferite ireductibile subunitare: 1/2
, 1/3
, 1/5
, 1/8
, 1/13
, 2/3
, 2/5
, 2/13
, 3/5
, 3/8
, 3/13
, 5/8
, 5/13
, 8/13
.
Exemplul 2:
fibofrac.in
2019
fibofrac.out
1547722
Exemplul 3:
fibofrac.in
500000
fibofrac.out
94988288219
#include <bits/stdc++.h> using namespace std; ifstream cin("fibofrac.in"); ofstream cout("fibofrac.out"); int E[1000001], n; long long int t; int main(){ cin >> n; for(int i = 1; i <= n; ++i) E[i] = i - 1; E[1] = 1; for(int i = 2; i <= n; ++i) for(int j = 2 * i; j <= n; j = j + i) E[j] = E[j] - E[i]; for(int i = 1; i <= n; ++i) if(i <= n / 2) t += 2 * E[i]; else t += E[i]; cout << t - n - 1; return 0; }