3081 - Truncatable Left: Difference between revisions
Paul Matei (talk | contribs) No edit summary |
Diana Butuza (talk | contribs) |
||
(2 intermediate revisions by the same user not shown) | |||
Line 9: | Line 9: | ||
* n este mai mic decât 1.000.000. | * n este mai mic decât 1.000.000. | ||
* Cel mai mare prim trunchiabil-stânga este 357686312646216567629137. | * Cel mai mare prim trunchiabil-stânga este 357686312646216567629137. | ||
== Exemplu == | == Exemplu == | ||
; Intrare | ; Intrare | ||
Line 28: | Line 28: | ||
return flag | return flag | ||
def | def este_prim(numar): | ||
if numar < 2: | if numar < 2: | ||
return False | return False | ||
Line 36: | Line 36: | ||
return True | return True | ||
def | def prim_trunchiabil_stanga(numar): | ||
while numar > 0: | while numar > 0: | ||
if not | if not este_prim(numar): | ||
return False | return False | ||
numar = numar % (10 ** (len(str(numar))-1)) | numar = numar % (10 ** (len(str(numar))-1)) | ||
Line 48: | Line 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 | if prim_trunchiabil_stanga(numar): | ||
print("DA") | print("DA") | ||
else: | else: | ||
Line 57: | Line 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. | ||
Line 62: | Line 63: | ||
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 '''validare_date''' verifică dacă numărul dat este un șir de cifre și dacă valoarea sa se află în intervalul [0, 1000000000]. | ||
Funcția ''' | Funcția '''este_prim''' verifică dacă un număr dat este prim sau nu, folosind metoda de testare a divizibilității. | ||
Funcția ''' | Funcția '''prim_trunchiabil_stanga''' 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 | În cazul în care numărul dat de la tastatură trece validarea, programul afișează '''Datele de intrare corespund restricțiilor impuse''' și convertește valoarea la un număr întreg, apoi utilizează funcția '''prim_trunchiabil_stanga''' 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'''. |
Latest revision as of 09:46, 10 April 2023
Cerinţa[edit | edit source]
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[edit | edit source]
Programul citește un număr natural nenul n.
Date de ieşire[edit | edit source]
Programul va afișa DA dacă n este prim trunchiabil-stânga, altfel va afișa NU.
Restricții și precizări[edit | edit source]
- n este mai mic decât 1.000.000.
- Cel mai mare prim trunchiabil-stânga este 357686312646216567629137.
Exemplu[edit | edit source]
- Intrare
- 1223
- Ieșire
- Datele de intrare corespund restricțiilor impuse.
- DA
Explicație[edit | edit source]
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[edit | edit source]
<syntaxhighlight lang="python" line> 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.")
</syntaxhighlight>
Explicație rezolvare[edit | edit source]
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 este_prim verifică dacă un număr dat este prim sau nu, folosind metoda de testare a divizibilității.
Funcția prim_trunchiabil_stanga 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 convertește valoarea la un număr întreg, apoi utilizează funcția prim_trunchiabil_stanga 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.