1574 - Prietene: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: == Cerinţa == Se dau două numere naturale. Să se afle dacă aceste numere sunt prietene. Numerele prietene sunt perechile de numere în care fiecare număr în parte este suma tuturor divizorilor celuilalt număr, mai puțin acesta. == Date de intrare == Programul citește de la tastatură două numere '''numar1''' și '''numar2'''. == Date de ieşire == Programul va afișa pe ecran mesajul '''PRIETENE''' dacă cele două numere sunt prietene, respectiv '''NU SUNT PRIETENE...
 
No edit summary
 
(2 intermediate revisions by the same user not shown)
Line 13: Line 13:
: 220 284
: 220 284
; Ieșire
; Ieșire
: Datele introduse corespund restricțiilor impuse.
: Datele de intrare corespund restricțiilor impuse.
: PRIETENE
: PRIETENE
== Explicație ==  
== Explicație ==  
Line 19: Line 19:
== Rezolvare ==
== Rezolvare ==
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
def validare_date(numar):
def validare_date(numar1, numar2):
     flag = False
     flag = False
     if numar.isdigit():
     if numar1.isdigit() and numar2.isdigit():
         if 0 <= int(numar) <= 1_000_000_000:
         if 0 <= int(numar1) <= 100_000 and 0 <= int(numar2) <= 100_000:
             flag = True
             flag = True
     return flag
     return flag




def pseudo(numar):
def prietene(numar1, numar2):
     suma_divizorilor = 0
     suma_div_num1 = sum(i for i in range(1, numar1) if numar1 % i == 0)
     for i in range(1, numar + 1):
     suma_div_num2 = sum(i for i in range(1, numar2) if numar2 % i == 0)
        if numar % i == 0:
     if suma_div_num1 == numar2 and suma_div_num2 == numar1:
            suma_divizorilor += i
         print("PRIETENE")
     if suma_divizorilor % numar == 0:
         print("DA")
     else:
     else:
         print("NU")
         print("NU SUNT PRIETENE")




if __name__ == '__main__':
if __name__ == '__main__':
     numar = input()
     numar1, numar2 = input().split()
     if validare_date(numar):
     if validare_date(numar1, numar2):
         print("\nDatele de intrare corespund restricțiilor impuse.\n")
         print("\nDatele de intrare corespund restricțiilor impuse.\n")
         pseudo(int(numar))
         prietene(int(numar1), int(numar2))
     else:
     else:
         print("Datele de intrare nu corespund restricțiilor impuse.")
         print("Datele de intrare nu corespund restricțiilor impuse.")


</syntaxhighlight>
</syntaxhighlight>
== Explicație ==
Acest program primește la intrare două numere naturale și verifică dacă ele sunt numere prietene. Pentru a valida datele de intrare, se verifică dacă cele două numere sunt numere întregi și dacă se încadrează în intervalul 0-100000.
Funcția prietene(numar1, numar2) calculează suma divizorilor fiecărui număr și verifică dacă suma divizorilor primului număr este egală cu al doilea număr și invers. Dacă condiția este îndeplinită, programul afișează "PRIETENE", în caz contrar afișează "NU SUNT PRIETENE".

Latest revision as of 10:11, 25 April 2023

Cerinţa[edit]

Se dau două numere naturale. Să se afle dacă aceste numere sunt prietene. Numerele prietene sunt perechile de numere în care fiecare număr în parte este suma tuturor divizorilor celuilalt număr, mai puțin acesta.

Date de intrare[edit]

Programul citește de la tastatură două numere numar1 și numar2.

Date de ieşire[edit]

Programul va afișa pe ecran mesajul PRIETENE dacă cele două numere sunt prietene, respectiv NU SUNT PRIETENE dacă aceste numere nu sunt prietene.

Restricții și precizări[edit]

  • numar ∈ Ν
  • 0 ⩽ numar1 ⩽ 100.000
  • 0 ⩽ numar2 ⩽ 100.000

Exemplu[edit]

Intrare
220 284
Ieșire
Datele de intrare corespund restricțiilor impuse.
PRIETENE

Explicație[edit]

Divizorii lui 220 sunt 1, 2, 4, 5, 10, 11, 20, 22, 44, 55 și 110, iar suma acestora este 284. Divizorii lui 284 sunt 1, 2, 4, 71 și 142, iar suma acestora este 220.

Rezolvare[edit]

<syntaxhighlight lang="python" line> def validare_date(numar1, numar2):

   flag = False
   if numar1.isdigit() and numar2.isdigit():
       if 0 <= int(numar1) <= 100_000 and 0 <= int(numar2) <= 100_000:
           flag = True
   return flag


def prietene(numar1, numar2):

   suma_div_num1 = sum(i for i in range(1, numar1) if numar1 % i == 0)
   suma_div_num2 = sum(i for i in range(1, numar2) if numar2 % i == 0)
   if suma_div_num1 == numar2 and suma_div_num2 == numar1:
       print("PRIETENE")
   else:
       print("NU SUNT PRIETENE")


if __name__ == '__main__':

   numar1, numar2 = input().split()
   if validare_date(numar1, numar2):
       print("\nDatele de intrare corespund restricțiilor impuse.\n")
       prietene(int(numar1), int(numar2))
   else:
       print("Datele de intrare nu corespund restricțiilor impuse.")

</syntaxhighlight>

Explicație[edit]

Acest program primește la intrare două numere naturale și verifică dacă ele sunt numere prietene. Pentru a valida datele de intrare, se verifică dacă cele două numere sunt numere întregi și dacă se încadrează în intervalul 0-100000.

Funcția prietene(numar1, numar2) calculează suma divizorilor fiecărui număr și verifică dacă suma divizorilor primului număr este egală cu al doilea număr și invers. Dacă condiția este îndeplinită, programul afișează "PRIETENE", în caz contrar afișează "NU SUNT PRIETENE".