2913 - Proth Number

De la Universitas MediaWiki

Cerinţa

Un număr natural n se numește număr Proth dacă este de forma n=k*2p+1, unde k și p sunt numere naturale, k este impar și k < 2p. Să se scrie un program care citește un număr natural și verifică dacă este număr Proth.

Date de intrare

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

Date de ieşire

Programul va afișa pe ecran mesajul DA dacă n este număr Proth, respectiv NU în caz contrar.

Restricții și precizări

  • 1 ≤ n ≤ 1.000.000.000

Exemplu

Intrare
25
Ieșire
25 este numar Proth.

Rezolvare

def validare_date(n):
    if not 1 <= n <= 1000000000:
        print("Numarul trebuie sa fie intre 1 si 1000000000.")
        return False
    return True

def este_numar_proth(n):
    if not validare_date(n):
        return False

    k = 1
    while k < n:
        p = (n - 1) // (2**k)
        if 2**k * p + 1 == n and p % 2 == 1:
            return True
        k += 1

    return False

if __name__ == '__main__':
    n = int(input("Introduceti numarul n: "))
    if validare_date(n):
        print("\nDatele de intrare corespund restricțiilor impuse.\n")
        if este_numar_proth(n):
            print(f"{n} este numar Proth.")
        else:
            print(f"{n} nu este numar Proth.")
    else:
        print("Datele de intrare nu corespund restricțiilor impuse.")

Explicație rezolvare

Acest cod este un program scris în Python care verifică dacă un număr dat este un număr Proth. Programul definește două funcții, una care validează numărul dat și alta care verifică dacă numărul este un număr Proth. Programul verifică dacă numărul dat este valid, iar dacă este, afișează un mesaj de confirmare și verifică dacă numărul este un număr Proth. Dacă numărul este un număr Proth, programul afișează un mesaj care confirmă acest lucru, altfel afișează un mesaj care indică faptul că numărul nu este un număr Proth. Dacă numărul dat nu este valid, programul afișează un mesaj care indică acest lucru.