0020 - Suma divizorilor primi: Difference between revisions

From Bitnami MediaWiki
No edit summary
 
(2 intermediate revisions by the same user not shown)
Line 10: Line 10:


==Date de intrare==
==Date de intrare==
Numărul '''n'''.
Se citește de la tastatură un număr '''n'''.


==Date de ieșire==
==Date de ieșire==
Line 17: Line 17:
==Exemplu==
==Exemplu==
===Exemplul 1===
===Exemplul 1===
====Date de intrare====
;Date de intrare
1234
:1234
 
====Date de ieșire====
'''Datele de intrare sunt corecte.''' și valoarea returnată va fi 619.


;Date de ieșire
:Datele de intrare sunt corecte.
:619.


==Important==
==Important==
Line 36: Line 36:
         return True
         return True
     return False
     return False


def sum_div_prim(numar, suma=0):
def sum_div_prim(numar, suma=0):
     if validate_input(numar):
     for i in range(2, numar + 1):
        for i in range(2, numar + 1):
        if numar % i == 0:
            if numar % i == 0:
            este_prim = True
                este_prim = True
            for j in range(2, int(i ** 0.5) + 1):
                for j in range(2, int(i ** 0.5) + 1):
                if i % j == 0:
                    if i % j == 0:
                    este_prim = False
                        este_prim = False
                    break
                        break
            if este_prim:
                if este_prim:
                suma += i
                    suma += i
    return suma
        return suma
 
    else:
        print("Datele de intrare sunt incorecte.")


if __name__ == '__main__':
if __name__ == '__main__':
     numar = input()
     numar = input()
    suma = 0
     if validate_input(numar):
     if validate_input(numar):
        numar = int(numar)
         print("Datele de intrare sunt corecte.")
         print("Datele de intrare sunt corecte.")
        numar = int(numar)
         print(sum_div_prim(numar, suma))
         print(sum_div_prim(numar))
     else:
     else:
         print("Datele de intrare sunt incorecte.")
         print("Datele de intrare sunt incorecte.")


</syntaxhighlight>
</syntaxhighlight>

Latest revision as of 16:18, 6 May 2023

Cerință[edit | edit source]

Să se scrie o funcție Python care să determine suma divizorilor primi ai unui număr natural transmis ca parametru. Funcția întoarce rezultatul prin intermediul unui parametru de ieşire.

Restricții de precizări[edit | edit source]

  • numele funcției va fi sum_div_prim
  • funcția va avea doi parametri, reprezentând numărul pentru care se calculează suma divizorilor, respectiv valoarea calculată
  • numărul pentru care se calculează suma divizorilor primi va fi mai mare decât 1 și mai mic decât 2.000.000.000

Date de intrare[edit | edit source]

Se citește de la tastatură un număr n.

Date de ieșire[edit | edit source]

Dacă datele de intrare sunt corecte, apare mesajul Datele de intrare sunt corecte. și se returnează valoarea cerută, în caz contrar Datele de intrare sunt incorecte..

Exemplu[edit | edit source]

Exemplul 1[edit | edit source]

Date de intrare
1234
Date de ieșire
Datele de intrare sunt corecte.
619.

Important[edit | edit source]

Soluţia propusă va conţine doar definiţia funcţiei cerute. Prezenţa în soluţie a altor instrucţiuni poate duce erori de compilare sau de execuţie care vor avea ca efect depunctarea soluţiei.


Rezolvare[edit | edit source]

Rezolvare ver. 1[edit | edit source]

<syntaxhighlight lang="python" line="1" start="1"> def validate_input(numar):

   if numar.isdigit() and 1 <= int(numar) <= 2_000_000_000:
       return True
   return False


def sum_div_prim(numar, suma=0):

   for i in range(2, numar + 1):
       if numar % i == 0:
           este_prim = True
           for j in range(2, int(i ** 0.5) + 1):
               if i % j == 0:
                   este_prim = False
                   break
           if este_prim:
               suma += i
   return suma


if __name__ == '__main__':

   numar = input()
   suma = 0
   if validate_input(numar):
       numar = int(numar)
       print("Datele de intrare sunt corecte.")
       print(sum_div_prim(numar, suma))
   else:
       print("Datele de intrare sunt incorecte.")


</syntaxhighlight>

Explicatii[edit | edit source]

În această soluție, am definit mai întâi funcția validate_input() care primește numărul de intrare și verifică dacă este un număr întreg și dacă este în intervalul specificat. Funcția returnează True dacă numărul este valid și False în caz contrar.

În funcția sum_div_prim(), apelăm mai întâi funcția validate_input() pentru a verifica dacă numărul este valid. Dacă nu este valid, afișăm un mesaj de eroare. Dacă este valid, efectuăm calculele pentru a găsi suma divizorilor primi.

În blocul if __name__ == '__main__':, am adăugat și o verificare suplimentară pentru a apela funcția validate_input() înainte de a afișa mesajul de intrare corectă și de a calcula suma divizorilor primi.