3355 - Factori 4

De la Universitas MediaWiki

Cerinţa

Se dau n numere naturale. Determinați cel mai mic număr care are un singur factor prim. Dacă nu există niciun număr cu un singur factor prim se va afișa mesajul NU EXISTA.

Date de intrare

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

Date de ieşire

Programul va afișa pe ecran numărul cerut.

Restricții și precizări

  • 1 ≤ n ≤ 1000
  • cele n numere citite vor fi mai mici decât 1.000.000.000

Exemplu

Intrare
5

12 9 16 4 20

Ieșire
4

Explicație

Dintre numere citite au un factor prim numerele 9 16 4. Dintre acestea cel mai mic este 4.

Rezolvare

import math


def validare_date(n, arr):
    if not isinstance(n, int) or n <= 0:
        return False
    if not isinstance(arr, list) or len(arr) != n or not all(isinstance(x, int) for x in arr):
        return False
    return True


def ok(n):
    d, cnt = 2, 0
    while n > 1:
        p = 0
        while n % d == 0:
            n //= d
            p += 1
        if p:
            cnt += 1
        d += 1
        if d * d > n:
            d = n
    return cnt == 1


if __name__ == '__main__':
    n = int(input("Introduceti numarul de elemente din lista: "))
    arr = list(map(int, input("Introduceti lista de numere: ").split()))

    if validare_date(n, arr):
        mini = math.inf
        for x in arr:
            if ok(x) and x < mini:
                mini = x
        if mini < math.inf:
            print("Cel mai mic număr prim putere din listă este:", mini)
        else:
            print("Nu există niciun număr prim putere în listă.")
    else:
        print("Datele de intrare nu corespund restricțiilor impuse.")

Explicație rezolvare

Acest cod primește o listă de numere întregi și găsește cel mai mic număr din listă care este un număr prim putere.

Pentru a verifica dacă un număr este un număr prim putere, se calculează factorii primi ai numărului și se numără câți factori primi diferiți are. Dacă numărul de factori primi diferiți este 1, atunci numărul este o putere a unui număr prim.

Codul începe prin a citi numărul de elemente din listă și lista însăși, utilizând funcția input() și list(). Apoi, se validează datele de intrare cu funcția validare_date(), care verifică că n este un număr întreg pozitiv și că lista conține n numere întregi.

După validarea datelor de intrare, se inițializează variabila mini cu o valoare foarte mare. Se parcurge lista cu un for loop, și pentru fiecare element se verifică dacă este un număr prim putere cu ajutorul funcției ok(). Dacă numărul este un număr prim putere și este mai mic decât valoarea actuală a lui mini, atunci acesta devine noul mini.

La final, se verifică dacă mini a fost actualizat. Dacă da, atunci se afișează cel mai mic număr prim putere din listă, altfel se afișează un mesaj de eroare.