3785 - AI

De la Universitas MediaWiki

Al Bundy a plecat la serviciu, lăsându-i soţiei lui, Peg, cardul de cumpărături. PIN-ul este valoarea expresiei E(n)=∑nk=1(2⋅(a2+b2)k2⋅cos(k⋅α)), unde α=arctg(ab) , iar n, a, b sunt numere naturale nenule.

Cerința

Să se afle valoarea expresiei E(n), modulo 1.000.000.007.

Date de intrare

Fișierul de intrare alin.txt conține pe prima linie numerele n, a, b, separate prin spațiu.

Date de ieșire

Fișierul de ieșire alout.txt va conține pe prima linie valoarea expresiei E(n), modulo 1.000.000.007.

Restricții și precizări

  • 1 ≤ n ≤ 10(12)
  • 1 ≤ a , b ≤ 20

Exemplul 1

alin.txt
3 5 12
alout.txt
1918


Exemplul 2

alin.txt
10 5 8
alout.txt
765450729


Rezolvare

#3785 - AI
import math

def calculate_expression(n, a, b):
    alpha = math.atan(a * b)
    result = 0

    for k in range(1, n + 1):
        term = (2 * (a**2 + b**2) * k**2 * math.cos(k * alpha)) % 1000000007
        result = (result + term) % 1000000007

    return result
def verificare_restrictii(n, a, b):  
    if 1 <= n <=  10**12
       1 <= a, b <= 20:   
        return True
    else:
        return False

if __name__ == "__main__":
    with open("alin.txt", "r") as input_file, open("alout.txt", "w") as output_file:
        n, a, b = map(int, input_file.readline().split())
        result = calculate_expression(n, a, b)
        output_file.write(str(result) + "\n")

Explicatie

Dacă α=arctg(5/12), atunci sin(α)=5/13 şi cos(α)=12/13. Avem E(3)=2⋅13⋅cos(α)+2⋅13*2⋅cos(2α)+2⋅13*3⋅cos(3α)=2⋅13⋅12/13+2⋅13*2⋅(2⋅cos2(α)−1)+2⋅13*3⋅(4⋅cos*3(α)−3⋅cos(α))=24+238+1656=1918.