2699 - Puterile Lui N

De la Universitas MediaWiki

Date de intrare

Programul citește de la tastatură numerele n, și p, separate prin spații.

Date de ieșire

Dacă datele sunt introduse corect, pe ecran se va afișa: "Date de intrare valide.", apoi programul va afișa pe ecran în ordine crescătoare, toate puterile lui n mai mici sau egale cu p, separate prin exact un spațiu. În cazul în care datele nu respectă restricțiile, se va afișa pe ecran: "Date de intrare invalide".

Restricții și precizări

2 ≤ n ≤ 10 1 ≤ p ≤ 1.000.000.000.000

Exemplu:

Intrare

4 120

Ieșire

Date de intrare valide
1 4 16 64

Rezolvare

def validare_date(n: int, p: int) -> bool:
    """
    Functia de validare pentru input.
    Verifica daca n este intre 2 si 10 si daca p este intre 1 si 1.000.000.000.000.
    """
    if not (2 <= n <= 10):
        print("n trebuie sa fie intre 2 si 10.")
        return False
    if not (1 <= p <= 10**12):
        print("p trebuie sa fie intre 1 si 1.000.000.000.000.")
        return False
    return True


def puterea_lui_n(n: int, p: int):
    """
    Functia de rezolvare pentru exercitiul dat.
    Returneaza un string cu toate puterile lui n mai mici sau egale cu p, separate prin exact un spatiu.
    """
    puteri = []
    i = 0
    while n ** i <= p:
        puteri.append(n ** i)
        i += 1
    print(' '.join(map(str, puteri)))


if __name__ == '__main__':
    """
    Functia if __name__ care citeste datele de intrare, verifica validitatea lor si afiseaza rezultatul.
    """
    n, p = map(int, input().split())
    if validare_date(n, p):
        print("Date de intrare valide")
        puterea_lui_n(n, p)
    else:
        print("Date de intrare invalide")

Explicatie cod:

Funcția validare_date(n, p) verifică dacă valorile n și p sunt valide pentru a rezolva problema dată. Verifică dacă n este între 2 și 10, iar p este între 1 și 1.000.000.000.000. Dacă nu se îndeplinesc aceste condiții, returnează False. Altfel, returnează True. Funcția puterea_lui_n(n, p) rezolvă problema dată. Utilizează o buclă while pentru a genera puterile lui n mai mici sau egale cu p. Adaugă fiecare putere la lista puteri și crește exponentul i cu 1 la fiecare iterație. La final, afișează elementele listei puteri, separate printr-un singur spațiu, utilizând funcția join() și funcția print(). În blocul if __name__ == '__main__':, se citește input-ul de la utilizator utilizând funcția input(). Valorile citite sunt convertite în numere întregi utilizând funcția map(int, input().split()). Se verifică dacă valorile introduse sunt valide utilizând funcția validare_date(n, p). Dacă nu sunt valide, se afișează mesajul "Date de intrare invalide". Dacă valorile introduse sunt valide, se apelează funcția puterea_lui_n(n, p) pentru a rezolva problema și a afișa rezultatul.