2324 - Prim 002

De la Universitas MediaWiki
Versiunea din 26 martie 2023 10:26, autor: Paul Matei (discuție | contribuții) (Pagină nouă: == Cerinţa == Anul '''2017''' tocmai s-a încheiat, iar nostalgicii suferă în tăcere deoarece acesta era număr prim. Dorel, un personaj întreprinzător, s-a gândit să afle pentru un număr natural n dat, care este cel mai mare divizor prim al acestuia. == Date de intrare == Programul citește de la tastatură numărul '''n'''. == Date de ieşire == Programul va afișa pe ecran cel mai mare divizor prim al lui '''n'''. == Restricții și precizări == *'''1 ≤ n ≤ 1...)
(dif) ← Versiunea anterioară | Versiunea curentă (dif) | Versiunea următoare → (dif)

Cerinţa

Anul 2017 tocmai s-a încheiat, iar nostalgicii suferă în tăcere deoarece acesta era număr prim. Dorel, un personaj întreprinzător, s-a gândit să afle pentru un număr natural n dat, care este cel mai mare divizor prim al acestuia.

Date de intrare

Programul citește de la tastatură numărul n.

Date de ieşire

Programul va afișa pe ecran cel mai mare divizor prim al lui n.

Restricții și precizări

  • 1 ≤ n ≤ 10^14

Exemplu

Intrare
2018
Ieșire
1009

Explicație

Divizorii lui 2018 sunt 1, 2, 1009, 2018, iar cel mai mare divizor prim este 1009.

Rezolvare

def validare_date(n):
    """Verifică dacă n se încadrează în intervalul [1, 10^14]."""
    return 1 <= n <= 10**14

def este_prim(n):
    """Verifică dacă n este un număr prim."""
    if n < 2:
        return False
    for i in range(2, int(n**0.5)+1):
        if n % i == 0:
            return False
    return True

n = int(input("Introduceți numărul n: "))
while not validare_date(n):
    print("Numărul introdus nu se încadrează în intervalul [1, 10^14].")
    n = int(input("Introduceți alt număr: "))

if este_prim(n):
    print(n, "este un număr prim.")
else:
    d = 2
    while n > 1:
        if n % d == 0:
            n //= d
            if este_prim(d):
                max_div_prim = d
        else:
            d += 1
    print("Cel mai mare divizor prim al lui", n, "este", max_div_prim)