0800 - Perfect: Difference between revisions

From Bitnami MediaWiki
No edit summary
Line 1: Line 1:
==Enunt==
==Enunț==


Un număr natural nenul se numește '''perfect''' dacă este egal cu suma divizorilor săi naturali strict mai mici decât el.
Un număr natural nenul se numește '''perfect''' dacă este egal cu suma divizorilor săi naturali strict mai mici decât el.
'''Exemplu''': '''28''' este număr perfect pentru că '''28=1+2+4+7+14'''.
'''Exemplu''': '''28''' este număr perfect pentru că '''28=1+2+4+7+14'''.


==Cerință==
==Cerință==

Revision as of 17:29, 6 May 2023

Enunț

Un număr natural nenul se numește perfect dacă este egal cu suma divizorilor săi naturali strict mai mici decât el. Exemplu: 28 este număr perfect pentru că 28=1+2+4+7+14.

Cerință

Să se scrie o funcție Python care, pentru doi parametri, a și b, afișează pe ecran, separate prin câte un spațiu, în ordine descrescătoare, toate numerele perfecte din intervalul [a,b]. Dacă în interval nu există astfel de numere, subprogramul afișează pe ecran mesajul nu exista.


Date de intrare

  • doi parametri, a și b, reprezentând capetele intervalului [a,b] în care căutăm numerele perfecte.

Date de ieșire

  • numerele perfecte din intervalul [a,b] afișate pe ecran în ordine descrescătoare, separate prin câte un spațiu. Dacă nu există astfel de numere, se va afișa mesajul "nu exista".


Restricții de precizări

  • numele funcției va fi perfect și va avea exact doi parametri, a și b, cu semnificația de mai sus
  • 1 ≤ a ≤ b ≤10000


Exemplu

Pentru a=5 și b=30, se afișează pe ecran: 28 6.

Important

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

Rezolvare ver. 1

<syntaxhighlight lang="python" line="1" start="1">

def perfect(a, b):

   # Verifică numerele perfecte din intervalul [a, b]
   perfect_numbers = []
   for num in range(a, b+1):
       divisors_sum = 0
       for i in range(1, num):
           if num % i == 0:
               divisors_sum += i
       if divisors_sum == num:
           perfect_numbers.append(num)
   
   # Afiseaza numerele perfecte în ordine descrescătoare
   if len(perfect_numbers) == 0:
       print("Nu exista numere perfecte în intervalul dat.")
   else:
       perfect_numbers.sort(reverse=True)
       print("Numerele perfecte din intervalul [{} , {}] sunt: {}".format(a, b, ' '.join(map(str, perfect_numbers))))


  1. Exemplu de utilizare a functiei

def main():

   a = 1
   b = 10000
   perfect(a, b)


  1. Verificați restricțiile

if __name__ == '__main__':

   a, b = map(int, input().split())
   if not (1 <= a <= b <= 10000):
       print("a si b trebuie sa fie numere naturale, cu 1 <= a <= b <= 10000")
   else:
       perfect(a, b)


</syntaxhighlight>

Explicatii

Funcția validate_input verifică dacă doi parametri îndeplinesc restricțiile impuse de problemă, iar funcția perfect calculează toate numerele perfecte din intervalul dat și le afișează în ordine descrescătoare sau afișează un mesaj corespunzător dacă nu există astfel de numere.