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

De la Universitas MediaWiki
(Pagină nouă: Sursa: [https://www.pbinfo.ro/probleme/1212/sumapatrate] == Cerinţa == Se dă numărul natural nenul '''n'''. Să se determine produsul primelor '''n''' pătrate perfecte nenule. == Date de intrare == Programul citește de la tastatură numărul '''n'''. == Date de ieșire == Programul va afișa pe ecran, mesajul "Datele introduse corespund cerințelor" și pe o linie nouă numărul '''P''' , reprezentând produsul primelor '''n''' pătrate perfecte nenule, în caz contrar...)
 
 
(Nu s-au afișat 14 versiuni intermediare efectuate de alți 2 utilizatori)
Linia 1: Linia 1:
Sursa: [https://www.pbinfo.ro/probleme/1212/sumapatrate]
Sursa: [https://www.pbinfo.ro/probleme/1212/sumapatrate]
== Cerinţa ==
== Cerinţa ==
Se dă numărul natural nenul '''n'''. Să se determine produsul primelor '''n''' pătrate perfecte nenule.
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 ==
== Date de intrare ==
Programul citește de la tastatură numărul '''n'''.
Programul citește de la tastatură numărul '''N'''.
 
== Date de ieșire ==  
== Date de ieșire ==  
Programul va afișa pe ecran,  mesajul "Datele introduse corespund cerințelor" și pe o linie nouă numărul '''P''' , reprezentând produsul primelor '''n''' pătrate perfecte nenule, în caz contrar programul va afișa pe o linie noua mesajul "Datele introduse nu corespund cerintelor."
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 ==
== 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 45: 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 53: 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.