1212 - Sumă Pătrare: Difference between revisions

From Bitnami MediaWiki
Dragos1234 (talk | contribs)
Dragos1234 (talk | contribs)
 
(9 intermediate revisions by 2 users not shown)
Line 7: Line 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 ==
Line 19: Line 16:
: Introduceti numarul n: 4
: Introduceti numarul n: 4
; Ieșire
; Ieșire
: Rezultatul este: 30
: Datele de intrare corespund restrictiilor impuse
: 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>


Line 49: Line 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()


Line 57: Line 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.

Latest revision as of 22:53, 11 May 2023

Sursa: [1]

Cerinţa[edit | edit source]

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[edit | edit source]

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

Date de ieșire[edit | edit source]

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[edit | edit source]

  • 1 ⩽ N ⩽ 2.000.000.000

Exemplul 1[edit | edit source]

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


Exemplul 2[edit | edit source]

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


Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line>

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

</syntaxhighlight>

Explicatie rezolvare[edit | edit source]

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.