1212 - Sumă Pătrare: Diferență între versiuni

De la Universitas MediaWiki
 
(Nu s-au afișat 11 versiuni intermediare efectuate de alți 2 utilizatori)
Linia 7: Linia 7:


== Date de ieșire ==  
== Date de ieșire ==  
Acest program calculează suma pătratelor numerelor de la '''1 la n''', apoi aplică operatorul modulo pentru a obține restul împărțirii sumei la '''10234573'''. Datele de ieșire ale programului sunt următoarele:
Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele de intrare corespund restrictiilor impuse", apoi pe un rând nou va afișa valoarea '''S'''. În caz contrar, se va afișa mesajul: "Datele de intrare nu corespund restrictiilor impuse".
 
Dacă inputul '''n''' este mai mic decât '''1''' sau mai mare decât '''2.000.000.000''', se va afișa un mesaj de eroare, iar programul se va încheia.
În caz contrar, programul va calcula suma pătratelor numerelor de la '''1 la n''', aplicând operatorul modulo '''10234573''' și va afișa rezultatul.


== Restricţii şi precizări ==
== Restricţii şi precizări ==
* 0 < '''n''' ⩽ 10
* 1 ⩽ '''N''' ⩽ 2.000.000.000


== Exemplul 1 ==
== Exemplul 1 ==
; Intrare
; Intrare
: 4
: Introduceti numarul n: 4
; Ieșire
; Ieșire
: Datele corespund cerințelor.
: Datele de intrare corespund restrictiilor impuse
: 576
: 30
<br>
<br>


== Exemplul 2 ==
== Exemplul 2 ==
; Intrare
; Intrare
: 16
: 0
; Ieșire
: Datele introduse nu corespund cerințelor.
<br>
== Exemplul 3 ==
; Intrare
: 7
; Ieșire
; Ieșire
: Datele corespund cerințelor.
: Datele de intrare nu corespund restrictiilor impuse
: 25401600
<br>
<br>


Linia 50: Linia 40:
def validare_n(n):
def validare_n(n):
     if n < 1 or n > 2000000000:
     if n < 1 or n > 2000000000:
         print("n trebuie sa fie intre 1 si 2.000.000.000.")
         print("Datele de intrare nu corespund restrictiilor impuse")
         exit()
         exit()


Linia 58: Linia 48:
     validare_n(n)
     validare_n(n)
     rezultat = suma_patrate_modulo(n)
     rezultat = suma_patrate_modulo(n)
     print(f"Rezultatul este: {rezultat}")
     print(f"Datele de intrare corespund restrictiilor impuse\n {rezultat}")


</syntaxhighlight>
</syntaxhighlight>
== Explicatie rezolvare ==
Acest program calculează suma pătratelor primelor n numere naturale, exprimată modulo 10234573. Programul primește un număr întreg n și verifică dacă acesta se încadrează într-un interval specific. Dacă numărul este valid, programul calculează suma pătratelor folosind formula matematică corespunzătoare și apoi exprimă rezultatul modulo 10234573.
Funcția validare_n(n) primește numărul n și verifică dacă acesta se încadrează în intervalul [1, 2000000000]. Dacă numărul este în afara acestui interval, se afișează un mesaj de eroare și programul se oprește folosind funcția exit().
Funcția suma_patrate_modulo(n) calculează suma pătratelor primelor n numere naturale folosind formula numarator / numitor exprimată modulo 10234573, unde numărătorul și numitorul sunt date de:
numarator = (n * (n + 1) % 10234573) * ((2 * n + 1) % 10234573)
numitor = 6 % 10234573
Pentru a evita erorile de calcul, se calculează inversul modular al numitorului, utilizând funcția pow(). Inversul modular al numărului a este definit ca numărul b, astfel încât a * b % m = 1, unde m este un număr prim.
În secțiunea principală a programului, utilizatorul este întrebat să introducă numărul n. Apoi, se verifică dacă numărul introdus este valid folosind funcția validare_n(n). Dacă numărul este valid, se calculează suma pătratelor folosind funcția suma_patrate_modulo(n) și se afișează pe ecran împreună cu un mesaj de confirmare a validării numărului introdus.

Versiunea curentă din 11 mai 2023 22:53

Sursa: [1]

Cerinţa

Fiind dat N, un număr natural nenul, calculați suma S=1^2 + 2^2 + 3^2 + ... + n^2, modulo 10.234.573.

Date de intrare

Programul citește de la tastatură numărul N.

Date de ieșire

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele de intrare corespund restrictiilor impuse", apoi pe un rând nou va afișa valoarea S. În caz contrar, se va afișa mesajul: "Datele de intrare nu corespund restrictiilor impuse".

Restricţii şi precizări

  • 1 ⩽ N ⩽ 2.000.000.000

Exemplul 1

Intrare
Introduceti numarul n: 4
Ieșire
Datele de intrare corespund restrictiilor impuse
30


Exemplul 2

Intrare
0
Ieșire
Datele de intrare nu corespund restrictiilor impuse


Rezolvare

#1212
def suma_patrate_modulo(n):
    numarator = (n * (n + 1) % 10234573) * ((2 * n + 1) % 10234573)
    numitor = 6 % 10234573
    invers_modular_numitor = pow(numitor, 10234571, 10234573)
    rezultat = (numarator * invers_modular_numitor) % 10234573
    return rezultat


def validare_n(n):
    if n < 1 or n > 2000000000:
        print("Datele de intrare nu corespund restrictiilor impuse")
        exit()


if __name__ == '__main__':
    n = int(input("Introduceti numarul n: "))
    validare_n(n)
    rezultat = suma_patrate_modulo(n)
    print(f"Datele de intrare corespund restrictiilor impuse\n {rezultat}")

Explicatie rezolvare

Acest program calculează suma pătratelor primelor n numere naturale, exprimată modulo 10234573. Programul primește un număr întreg n și verifică dacă acesta se încadrează într-un interval specific. Dacă numărul este valid, programul calculează suma pătratelor folosind formula matematică corespunzătoare și apoi exprimă rezultatul modulo 10234573.

Funcția validare_n(n) primește numărul n și verifică dacă acesta se încadrează în intervalul [1, 2000000000]. Dacă numărul este în afara acestui interval, se afișează un mesaj de eroare și programul se oprește folosind funcția exit().

Funcția suma_patrate_modulo(n) calculează suma pătratelor primelor n numere naturale folosind formula numarator / numitor exprimată modulo 10234573, unde numărătorul și numitorul sunt date de:

numarator = (n * (n + 1) % 10234573) * ((2 * n + 1) % 10234573)

numitor = 6 % 10234573

Pentru a evita erorile de calcul, se calculează inversul modular al numitorului, utilizând funcția pow(). Inversul modular al numărului a este definit ca numărul b, astfel încât a * b % m = 1, unde m este un număr prim.

În secțiunea principală a programului, utilizatorul este întrebat să introducă numărul n. Apoi, se verifică dacă numărul introdus este valid folosind funcția validare_n(n). Dacă numărul este valid, se calculează suma pătratelor folosind funcția suma_patrate_modulo(n) și se afișează pe ecran împreună cu un mesaj de confirmare a validării numărului introdus.