1124 - Patrate: Difference between revisions
No edit summary |
|||
(One intermediate revision by the same user not shown) | |||
Line 6: | Line 6: | ||
==Date de ieșire== | ==Date de ieșire== | ||
Programul va afişa pe ecran un număr natural, reprezentând numărul de pătrate formate cu cele (n+1)2 puncte. Deoarece rezultatul poate fi mare, se va afişa răspunsul modulo 666013. De asemenea, se afișează un mesaj de validare a datelor introduse | Programul va afişa pe ecran un număr natural, reprezentând numărul de pătrate formate cu cele (n+1)2 puncte. Deoarece rezultatul poate fi mare, se va afişa răspunsul modulo 666013. De asemenea, se afișează un mesaj de validare a datelor introduse "Input valid" sau instructiuni de introducere pentru n în caz contrar ("n trebuie sa fie intre 1 si 2.000.000.000"). | ||
==Restricții și precizări== | ==Restricții și precizări== |
Latest revision as of 20:51, 4 May 2023
Cerința[edit | edit source]
Dându-se n, un număr natural, să se afle numărul de pătrate care au colţurile coordonate numere întregi cuprinse între 0 şi n inclusiv.
Date de intrare[edit | edit source]
Programul citește de la tastatură un număr natural n.
Date de ieșire[edit | edit source]
Programul va afişa pe ecran un număr natural, reprezentând numărul de pătrate formate cu cele (n+1)2 puncte. Deoarece rezultatul poate fi mare, se va afişa răspunsul modulo 666013. De asemenea, se afișează un mesaj de validare a datelor introduse "Input valid" sau instructiuni de introducere pentru n în caz contrar ("n trebuie sa fie intre 1 si 2.000.000.000").
Restricții și precizări[edit | edit source]
- 1 ⩽ n ⩽ 2.000.000.000
- Pentru teste în valoare de 30 de puncte, n ≤ 10
- Pentru teste în valoare de 75 de puncte, n ≤ 2.000.000
Exemplu[edit | edit source]
- Intrare
- 2
- Ieșire
- Input valid
- 6
Explicație exemplu[edit | edit source]
Pătratele ce se formează au colţurile:
- (0, 0), (0, 1), (1, 1), (1, 0)
- (0, 1), (0, 2), (1, 2), (1, 1)
- (1, 0), (1, 1), (2, 1), (2, 0)
- (1, 1), (1, 2), (2, 2), (2, 1)
- (0, 0), (0, 2), (2, 2), (2, 0)
- (0, 1), (1, 2), (2, 1), (1, 0)
Rezolvare[edit | edit source]
<syntaxhighlight lang="python"> def validate_input(n):
if n < 1 or n > 2000000000: raise ValueError("n trebuie sa fie intre 1 si 2.000.000.000") else: print("Input valid")
def calculate_sum(n):
validate_input(n) sol = 0 mod = 666013
n %= mod
for i in range(n): sol += (n - i) * (n - i) * (i + 1) sol %= mod
return sol
if __name__ == "__main__":
n = int(input()) sol = calculate_sum(n) print(sol)
</syntaxhighlight>
Explicație cod[edit | edit source]
Acest cod definește trei funcții și o funcție principală:
Funcția validate_input(n) verifică dacă valoarea parametrului n este cuprinsă între 1 și 2.000.000.000, și aruncă o excepție ValueError dacă nu este.
Funcția calculate_sum(n) primește un parametru n și calculează suma unei anumite formule matematice, bazată pe valoarea lui n și un număr constant (mod = 666013). Apoi, funcția returnează această sumă.
Funcția main() citește un număr întreg de la tastatură, apelează funcția calculate_sum(n) pentru a calcula suma corespunzătoare, și apoi afișează rezultatul.
Dacă acest script este rulat ca un program, atunci funcția main() este apelată.