3785 - AI: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: == Cerința == Să se afle valoarea expresiei E(n), modulo 1.000.000.007. == Date de intrare == Fișierul de intrare al.in conține pe prima linie numerele n, a, b, separate prin spațiu. == Date de ieșire == Fișierul de ieșire al.out va conține pe prima linie valoarea expresiei E(n), modulo 1.000.000.007. == Restricții și precizări == ~ 1 ≤ n ≤ 10(12) <br> ~ 1 ≤ a , b ≤ 20 == Exemplu 1 == ; Intrare : al.in :3 5 12 ; Ieșire : al.out :1918 <br> == Exemplu 2 ==...
 
No edit summary
Line 1: Line 1:
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 ==
== Cerința ==
Să se afle valoarea expresiei E(n), modulo 1.000.000.007.
Să se afle valoarea expresiei E(n), modulo 1.000.000.007.
== Date de intrare ==
== Date de intrare ==
Fișierul de intrare al.in conține pe prima linie numerele n, a, b, separate prin spațiu.
Fișierul de intrare alin.txt conține pe prima linie numerele n, a, b, separate prin spațiu.
== Date de ieșire ==  
== Date de ieșire ==  
Fișierul de ieșire al.out va conține pe prima linie valoarea expresiei E(n), modulo 1.000.000.007.
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 ==
== Restricții și precizări ==
~ 1 ≤ n ≤ 10(12)
*1 ≤ n ≤ 10(12)
<br>
*1 ≤ a , b ≤ 20
~ 1 ≤ a , b ≤ 20
== Exemplul 1 ==
== Exemplu 1 ==
; alin.txt
; Intrare
: al.in
:3 5 12
:3 5 12
; Ieșire
; alout.txt
: al.out
:1918
:1918
<br>
<br>
== Exemplu 2 ==
== Exemplul 2 ==
; Intrare
; alin.txt
: al.in
:10 5 8
:10 5 8
; Ieșire
; alout.txt
: al.out
:765450729
:765450729
<br>
<br>
Line 30: Line 27:
import math
import math


def calculate_E(n, a, b):
def calculate_expression(n, a, b):
     alpha = math.atan(a * b)
     alpha = math.atan(a * b)
     result = 0
     result = 0
   
 
     for k in range(1, n + 1):
     for k in range(1, n + 1):
         term = 2 * (a**2 + b**2) * k**2 * math.cos(k * alpha)
         term = (2 * (a**2 + b**2) * k**2 * math.cos(k * alpha)) % 1000000007
         result = (result + term) % 1000000007
         result = (result + term) % 1000000007
   
 
     return result
     return result
def verificare_restrictii(n, a, b): 
    if 1 <= n <=  10**12
      1 <= a, b <= 20: 
        return True
    else:
        return False


with open("al.in", "r") as file:
if __name__ == "__main__":
    n, a, b = map(int, file.readline().split())
    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")


result = calculate_E(n, a, b)


with open("al.out", "w") as file:
    file.write(str(result))
</syntaxhighlight>
</syntaxhighlight>

Revision as of 17:52, 8 January 2024

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

<syntaxhighlight lang="python" line>

  1. 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")


</syntaxhighlight>