2773 - fibona

De la Universitas MediaWiki
Versiunea pentru tipărire nu mai este suportată și poate avea erori de randare. Vă rugăm să vă actualizați bookmarkurile browserului și să folosiți funcția implicită de tipărire a browserului.

Cerinţa

Dorel tocmai a aflat despre existenţa şirului lui Fibonacci: F0=0, F1=1, F2=1, F3=2, F4=3, F5=5,… . Pentru numerele n, k şi p date, Dorel vă roagă să calculaţi suma Fp + Fk+p + F2•k+p + … + Fn•k+p.

Date de intrare

Programul citește de la tastatură numerele n , k şi p.

Date de ieșire

Programul va afișa pe ecran suma cerută, modulo 1.000.000.007.

Restricţii şi precizări

  • 1 ⩽ n ⩽ 1016
  • 0 ⩽ p < k ⩽ 100

Exemplul 1

in
3 3 1 
out
72

Exemplul 2

in
0 1 1 
out
Datele de intrare nu corespund restrictiilor impuse

Rezolvare

def fibonacci_sum(n_val, k_val, p_val):
    mod = 1000000007
    fib = [0, 1]
    for i in range(2, n_val*k_val+p_val+1):
        fib.append((fib[i-1] + fib[i-2]) % mod)
    return sum(fib[i*k_val+p_val] for i in range(n_val+1)) % mod


def solve_problem(n_val, k_val, p_val):
    if 1 <= n_val <= 10**16 and 0 <= p_val < k_val <= 100:
        print("Datele de intrare corespund restrictiilor impuse")
        return fibonacci_sum(n_val, k_val, p_val)
    else:
        print("Datele de intrare nu corespund restrictiilor impuse")
        return None


n = int(input("Introduceți n: "))
k = int(input("Introduceți k: "))
p = int(input("Introduceți p: "))

print(solve_problem(n, k, p))

Explicatie

Suma cerută este F1 + F4 + F7 + F10 = 1 + 3 + 13 + 55 = 72.