0974 - Resturi: Diferență între versiuni

De la Universitas MediaWiki
Fără descriere a modificării
 
(Nu s-au afișat 8 versiuni intermediare efectuate de alți 2 utilizatori)
Linia 7: Linia 7:


== Date de ieșire ==  
== Date de ieșire ==  
Acest program primește două numere de intrare '''n și k''' și calculează suma resturilor împărțirii fiecărui număr de la '''1 la n la k'''.
Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele introduse corespund cerintelor.", apoi pe un rand programul va afișa pe ecran numărul S, reprezentând suma resturilor împărțirii tuturor numerelor naturale de la 1 la n prin numărul k. În caz contrar, se va afișa mesajul: "Datele introduse nu corespund cerintelor."
 
Datele de ieșire ale programului sunt suma resturilor. Dacă numerele introduse de utilizator nu se încadrează în intervalul permis pentru '''n sau k''', programul va ridica o excepție de tip '''ValueError''' și va afișa un mesaj corespunzător.


== Restricţii şi precizări ==
== Restricţii şi precizări ==
Linia 18: Linia 16:
: Introduceti numerele: 7 4
: Introduceti numerele: 7 4
; Ieșire
; Ieșire
: Datele introduse corespund cerintelor.
: 12
: 12
<br>
<br>
Linia 25: Linia 24:
: Introduceti numerele: 1000000000000000000000000 1000000000000000000000000000000
: Introduceti numerele: 1000000000000000000000000 1000000000000000000000000000000
; Ieșire
; Ieșire
: '''n''' trebuie să fie între 1 și 2.000.000.000
: Datele introduse nu corespund cerintelor.
<br>
<br>


Linia 33: Linia 32:
def validare_numere(n, k):
def validare_numere(n, k):
     if n < 1 or n > 2000000000:
     if n < 1 or n > 2000000000:
         raise ValueError("n trebuie să fie între 1 și 2.000.000.000")
         print("Datele introduse nu corespund cerintelor.")
        exit()
     if k < 1 or k > 2000000000:
     if k < 1 or k > 2000000000:
         raise ValueError("k trebuie să fie între 1 și 2.000.000.000")
         print("Datele introduse nu corespund cerintelor.")
        exit()




Linia 46: Linia 47:


if __name__ == '__main__':
if __name__ == '__main__':
    try:
         n, k = map(int, input("Introduceti numerele: ").split())
         n, k = map(int, input("Introduceti numerele: ").split())
         validare_numere(n, k)
         validare_numere(n, k)
         S = calc_suma_resturi(n, k)
         suma_resturilor = calc_suma_resturi(n, k)
         print(S)
         print(f"Datele introduse corespund cerintelor.\n{suma_resturilor}")
    except ValueError as e:
 
        print(e)
</syntaxhighlight>
 
==Explicatie rezolvare==
Acest program efectuează validarea și calculul sumei resturilor de la diviziunea fiecărui număr întreg de la 1 la n la k, unde n și k sunt două numere întregi introduse de utilizator.


În primul rând, funcția `validare_numere` verifică dacă numerele introduse de utilizator sunt între 1 și 2 miliarde, așa cum este cerut în cerințe. Dacă nu, programul afișează un mesaj corespunzător și se termină prin utilizarea funcției `exit()`.


</syntaxhighlight>
Funcția `calc_suma_resturi` calculează suma resturilor de la diviziunea fiecărui număr întreg de la 1 la n la k, utilizând o buclă `for`.
 
În funcția `main`, programul cere introducerea a două numere întregi separate prin spațiu de la utilizator, apoi validează datele folosind funcția `validare_numere` și calculează suma resturilor folosind funcția `calc_suma_resturi`. În cele din urmă, programul afișează mesajul "Datele introduse corespund cerințelor" și suma resturilor.

Versiunea curentă din 26 aprilie 2023 17:22

Sursa: [1]

Cerinţa

Se dau n și k numere naturale. Calculați suma resturilor împărțirii tuturor numerelor naturale de la 1 la n prin numărul k.

Date de intrare

Programul citește de la tastatură numerele n și k, separate prin spațiu.

Date de ieșire

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele introduse corespund cerintelor.", apoi pe un rand programul va afișa pe ecran numărul S, reprezentând suma resturilor împărțirii tuturor numerelor naturale de la 1 la n prin numărul k. În caz contrar, se va afișa mesajul: "Datele introduse nu corespund cerintelor."

Restricţii şi precizări

  • 1 ⩽ n, k ⩽ 2.000.000.000

Exemplul 1

Intrare
Introduceti numerele: 7 4
Ieșire
Datele introduse corespund cerintelor.
12


Exemplul 2

Intrare
Introduceti numerele: 1000000000000000000000000 1000000000000000000000000000000
Ieșire
Datele introduse nu corespund cerintelor.


Rezolvare

#0974
def validare_numere(n, k):
    if n < 1 or n > 2000000000:
        print("Datele introduse nu corespund cerintelor.")
        exit()
    if k < 1 or k > 2000000000:
        print("Datele introduse nu corespund cerintelor.")
        exit()


def calc_suma_resturi(n, k):
    suma_resturilor = 0
    for i in range(1, n+1):
        suma_resturilor += i % k
    return suma_resturilor


if __name__ == '__main__':
        n, k = map(int, input("Introduceti numerele: ").split())
        validare_numere(n, k)
        suma_resturilor = calc_suma_resturi(n, k)
        print(f"Datele introduse corespund cerintelor.\n{suma_resturilor}")

Explicatie rezolvare

Acest program efectuează validarea și calculul sumei resturilor de la diviziunea fiecărui număr întreg de la 1 la n la k, unde n și k sunt două numere întregi introduse de utilizator.

În primul rând, funcția `validare_numere` verifică dacă numerele introduse de utilizator sunt între 1 și 2 miliarde, așa cum este cerut în cerințe. Dacă nu, programul afișează un mesaj corespunzător și se termină prin utilizarea funcției `exit()`.

Funcția `calc_suma_resturi` calculează suma resturilor de la diviziunea fiecărui număr întreg de la 1 la n la k, utilizând o buclă `for`.

În funcția `main`, programul cere introducerea a două numere întregi separate prin spațiu de la utilizator, apoi validează datele folosind funcția `validare_numere` și calculează suma resturilor folosind funcția `calc_suma_resturi`. În cele din urmă, programul afișează mesajul "Datele introduse corespund cerințelor" și suma resturilor.