0974 - Resturi: Difference between revisions

From Bitnami MediaWiki
Dragos1234 (talk | contribs)
Pagină nouă: Sursa: [https://www.pbinfo.ro/probleme/974/resturi] == 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 prog...
 
Dragos1234 (talk | contribs)
 
(16 intermediate revisions by 2 users not shown)
Line 1: Line 1:
Sursa: [https://www.pbinfo.ro/probleme/974/resturi]
Sursa: [https://www.pbinfo.ro/probleme/974/resturi]
== Cerinţa ==
== Cerinţa ==
Se dă numărul natural nenul '''n'''. Să se determine produsul primelor '''n''' pătrate perfecte nenule.
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 ==
== Date de intrare ==
Programul citește de la tastatură numărul '''n'''.
Programul citește de la tastatură numerele '''n și k''', separate prin spațiu.
 
== 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 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 ==
== Restricţii şi precizări ==
* 0 < '''n''' ⩽ 10
* 1 ⩽ '''n, k''' ⩽ 2.000.000.000


== Exemplul 1 ==
== Exemplul 1 ==
; Intrare
; Intrare
: 4
: Introduceti numerele: 7 4
; Ieșire
; Ieșire
: Datele corespund cerințelor.
: Datele introduse corespund cerintelor.
: 576
: 12
<br>
<br>


== Exemplul 2 ==
== Exemplul 2 ==
; Intrare
; Intrare
: 16
: Introduceti numerele: 1000000000000000000000000 1000000000000000000000000000000
; Ieșire
: Datele introduse nu corespund cerințelor.
<br>
== Exemplul 3 ==
; Intrare
: 7
; Ieșire
; Ieșire
: Datele corespund cerințelor.
: Datele introduse nu corespund cerintelor.
: 25401600
<br>
<br>


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




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




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.


</syntaxhighlight>
Î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.

Latest revision as of 17:22, 26 April 2023

Sursa: [1]

Cerinţa[edit | edit source]

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

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

Date de ieșire[edit | edit source]

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

  • 1 ⩽ n, k ⩽ 2.000.000.000

Exemplul 1[edit | edit source]

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


Exemplul 2[edit | edit source]

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


Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line>

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

</syntaxhighlight>

Explicatie rezolvare[edit | edit source]

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.