1124 - Patrate: Difference between revisions
No edit summary |
|||
(2 intermediate revisions by 2 users 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== | ||
Line 17: | Line 17: | ||
: 2 | : 2 | ||
; Ieșire | ; Ieșire | ||
: | : Input valid | ||
: 6 | : 6 | ||
==Explicație== | ==Explicație exemplu== | ||
Pătratele ce se formează au colţurile: | Pătratele ce se formează au colţurile: | ||
Line 35: | Line 35: | ||
raise ValueError("n trebuie sa fie intre 1 si 2.000.000.000") | raise ValueError("n trebuie sa fie intre 1 si 2.000.000.000") | ||
else: | else: | ||
print(" | print("Input valid") | ||
Line 52: | Line 52: | ||
if __name__ == "__main__": | |||
n = int(input()) | n = int(input()) | ||
sol = calculate_sum(n) | sol = calculate_sum(n) | ||
print(sol) | print(sol) | ||
</syntaxhighlight> | </syntaxhighlight> |
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ă.