3081 - Truncatable Left: Diferență între versiuni

De la Universitas MediaWiki
Linia 28: Linia 28:
     return flag
     return flag


def is_prime(numar):
def este_prim(numar):
     if numar < 2:
     if numar < 2:
         return False
         return False
Linia 36: Linia 36:
     return True
     return True


def is_left_truncatable_prime(numar):
def prim_trunchiabil_stanga(numar):
     while numar > 0:
     while numar > 0:
         if not is_prime(numar):
         if not este_prim(numar):
             return False
             return False
         numar = numar % (10 ** (len(str(numar))-1))
         numar = numar % (10 ** (len(str(numar))-1))
Linia 48: Linia 48:
         print("\nDatele de intrare corespund restricțiilor impuse.\n")
         print("\nDatele de intrare corespund restricțiilor impuse.\n")
         numar = int(numar)
         numar = int(numar)
         if is_left_truncatable_prime(numar):
         if prim_trunchiabil_stanga(numar):
             print("DA")
             print("DA")
         else:
         else:
Linia 57: Linia 57:


</syntaxhighlight>
</syntaxhighlight>
==Explicație rezolvare==
==Explicație rezolvare==
Acest cod reprezintă un program care verifică dacă un număr natural dat este un număr prim trunchiabil stânga.
Acest cod reprezintă un program care verifică dacă un număr natural dat este un număr prim trunchiabil stânga.

Versiunea de la data 10 aprilie 2023 09:45

Cerinţa

Un număr prim se numește trunchiabil-stânga dacă, prin eliminare repetată a primei cifre, toate numerele rezultate sunt prime. Se dă un număr natural, să se verifice dacă numărul este prim trunchiabil-stânga.

Date de intrare

Programul citește un număr natural nenul n.

Date de ieşire

Programul va afișa DA dacă n este prim trunchiabil-stânga, altfel va afișa NU.

Restricții și precizări

  • n este mai mic decât 1.000.000.
  • Cel mai mare prim trunchiabil-stânga este 357686312646216567629137.

Exemplu

Intrare
1223
Ieșire
Datele de intrare corespund restricțiilor impuse.
DA

Explicație

Exemplu 1: 1223 e prim. Eliminăm 1, 223 e prim. Eliminăm 2, 23 e prim. Eliminăm 2, 3 e prim. Deci, numărul 1223 e prim trunchiabil-stânga.

Rezolvare

def validare_date(numar):
    flag = False
    if numar.isdigit():
        if 0 <= int(numar) <= 1_000_000_000:
            flag = True
    return flag

def este_prim(numar):
    if numar < 2:
        return False
    for i in range(2, int(numar**0.5) + 1):
        if numar % i == 0:
            return False
    return True

def prim_trunchiabil_stanga(numar):
    while numar > 0:
        if not este_prim(numar):
            return False
        numar = numar % (10 ** (len(str(numar))-1))
    return True

if __name__ == '__main__':
    numar = input("Introduceti un numar natural: ")
    if validare_date(numar):
        print("\nDatele de intrare corespund restricțiilor impuse.\n")
        numar = int(numar)
        if prim_trunchiabil_stanga(numar):
            print("DA")
        else:
            print("NU")
    else:
        print("Datele de intrare nu corespund restricțiilor impuse.")

Explicație rezolvare

Acest cod reprezintă un program care verifică dacă un număr natural dat este un număr prim trunchiabil stânga.

Funcția validare_date verifică dacă numărul dat este un șir de cifre și dacă valoarea sa se află în intervalul [0, 1000000000].

Funcția is_prime verifică dacă un număr dat este prim sau nu, folosind metoda de testare a divizibilității.

Funcția is_left_truncatable_prime verifică dacă un număr dat este un număr prim trunchiabil stânga sau nu. În cazul în care numărul nu este prim, se returnează False. Dacă numărul este prim, se elimină ultima cifră și se continuă cu verificarea până când se ajunge la o singură cifră, moment în care se returnează True.

În cazul în care numărul dat de la tastatură trece validarea, programul afișează Datele de intrare corespund restricțiilor impuse și converteste valoarea la un număr întreg, apoi utilizează funcția is_left_truncatable_prime pentru a verifica dacă numărul dat este un număr prim trunchiabil stânga. Dacă este, programul afișează DA, altfel afișează NU. În caz contrar, dacă numărul nu este valid, programul afișează Datele de intrare nu corespund restricțiilor impuse.