0111 - Nr Fact

De la Universitas MediaWiki
Versiunea pentru tipărire nu mai este suportată și poate avea erori de randare. Vă rugăm să vă actualizați bookmarkurile browserului și să folosiți funcția implicită de tipărire a browserului.

Cerinţa

Să se scrie un program care citește un șir de n numere naturale şi determină numărul din şir care are număr maxim de factori primi.

Date de intrare

Programul citește de la tastatură numărul n, iar apoi n numere naturale nenule, separate prin spaţii.

Date de ieşire

Programul afișează pe ecran numărul x, numărul din şir cu număr maxim de factori primi.

Restricții și precizări

  • 0 < n < 1001
  • cele n numere citite vor fi mai mici decât 2.000.000.000
  • dacă în şir există mai multe numere cu număr maxim de factori primi, se va afişa cel mai mic dintre acestea

Exemplu

Intrare
5
72 30 12 75 17
Ieșire
30

Explicație

30 are trei factori primi. Celelalte numere au mai puţini factori primi.

Rezolvare

def numar_factori_primi(n):
    factori_primi = 0
    divizor = 2
    while divizor <= n:
        if n % divizor == 0:
            factori_primi += 1
            while n % divizor == 0:
                n //= divizor
        divizor += 1
    return factori_primi


def validare_date(n, sir_numere):
    if n < 1 or n > 1000:
        return False
    for numar in sir_numere:
        if numar <= 0 or numar >= 2000000000:
            return False
    return True


if __name__ == '__main__':
    n = int(input("Introduceti numarul de numere din sir: "))
    sir_numere = list(map(int, input("Introduceti numerele separate prin spatii: ").split()))
    if validare_date(n, sir_numere):
        print("\nDatele de intrare corespund restricțiilor impuse.\n")
        max_factori_primi = 0
        numar_max_factori_primi = sir_numere[0]

        for numar in sir_numere:
            factori_primi = numar_factori_primi(numar)
            if factori_primi > max_factori_primi:
                max_factori_primi = factori_primi
                numar_max_factori_primi = numar
            elif factori_primi == max_factori_primi and numar < numar_max_factori_primi:
                numar_max_factori_primi = numar

        print(f"Numarul cu cel mai mare numar de factori primi este: {numar_max_factori_primi}")
    else:
        print("Datele de intrare nu corespund restricțiilor impuse.")

Explicație rezolvare

Acest cod verifică validitatea datelor de intrare și apoi găsește numărul dintr-un șir de numere care are cel mai mare număr de factori primi. Funcția numar_factori_primi(n) calculează numărul de factori primi ai unui număr, iar funcția validare_date(n, sir_numere) verifică dacă datele introduse sunt valide. Dacă datele sunt valide, programul găsește numărul din șir care are cel mai mare număr de factori primi și îl afișează.