1960 - Perfecte

De la Universitas MediaWiki

Cerința

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. Se dă un șir de n numere naturale. Pentru fiecare element din șir se va afișa valoarea 1 dacă acesta este perfect sau 0 în caz contrar.

Date de intrare

Programul citește de la tastatură numărul n și apoi n numere naturale.

Date de ieșire

Programul va afișa pe ecran șirul de valori 1 și 0 separate prin câte un spațiu, conform cerinței.

Restricții și precizări

  • 0 < n < 1000;
  • numerele citite vor fi mai mici decât ;

Exemplul 1

Intrare
5
28 7 8 9 6
Ieșire
Datele de intrare corespund restricțiilor impuse.
1 0 0 0 1

Explicație

28 și 6 sunt numere perfecte.

Exemplul 2

Intrare
0
0
Ieșire
Datele de intrare nu corespund restricțiilor impuse.

Rezolvare

#1960 - Perfecte
# definim funcția care primește ca argument un număr natural și verifică dacă acesta este perfect
def is_perfect(num):
    divisors_sum = 0
    for i in range(1, num):
        if num % i == 0:
            divisors_sum += i
    return divisors_sum == num


if __name__ == "__main__":
    # citim de la tastatură numărul de elemente și vectorul de numere
    n = int(input("Introduceți numărul de elemente: "))
    vector = list(map(int, input("Introduceți elementele vectorului: ").split()))
    # verificarea restricțiilor
    if 0 < n < 1000 and all(0 <= i < 10**19 for i in vector):
        print("Datele de intrare corespund restricțiilor impuse.")
        # pentru fiecare număr din vector, verificăm dacă este perfect și afișăm rezultatul
        for num in vector:
            if is_perfect(num):
                print("1", end=" ")
            else:
                print("0", end=" ")
        print()
    else:
        print("Datele de intrare nu corespund restricțiilor impuse.")