3311 - Nr Reg: Difference between revisions
Line 60: | Line 60: | ||
p = x // (d ** 2) | p = x // (d ** 2) | ||
return x, d, p | return x, d, p | ||
def verificare_rezultat(x, d, p): | |||
# Adăugăm condițiile de verificare | |||
return x % (d ** 2) == 0 and all(x % (f ** 2) == 0 for f in [2, 3, 5]) | |||
# Citire date de intrare | # Citire date de intrare | ||
Line 67: | Line 71: | ||
# Calcul și afișare rezultat | # Calcul și afișare rezultat | ||
rezultat = cel_mai_mic_divizor_patratic(n) | rezultat = cel_mai_mic_divizor_patratic(n) | ||
with open("nrregout.txt", "w") as file: | |||
# Verificare rezultat | |||
if verificare_rezultat(*rezultat): | |||
with open("nrregout.txt", "w") as file: | |||
file.write(" ".join(map(str, rezultat)) + "\n") | |||
else: | |||
print("Rezultat invalid. Verificați condițiile.") | |||
</syntaxhighlight> | </syntaxhighlight> |
Latest revision as of 11:40, 29 December 2023
Enunt[edit | edit source]
Numerele regulate sunt numerele ce au ca factori primi doar numerele 2, 3 și 5. Primele 20 de numere regulate sunt: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, 16, 18, 20, 24, 25, 27, 30, 32, 36.
Cerinta[edit | edit source]
Fișierul de intrare nrregin.txt conține pe prima linie numărul natural n (n<=10000). Scrieți un program care determină:
- cel de-al n-lea număr regulat, x;
- cel mai mic divizor d al lui x cu proprietatea că p = x / d este pătrat perfect;
- valoarea p.
Programul va scrie în fișierul nrregout.txt valorile x d p, separate prin câte spațiu.
Exemplu: dacă n=10, al zecelea număr regulat este x=12; d=3, iar p=4.
Date de intrare[edit | edit source]
Fișierul de intrare nrregin.txt conține pe prima linie numărul natural n.
Date de iesire[edit | edit source]
Fișierul de ieșire nrregout.txt va conține pe prima linie numărul x d p, separate prin câte un spațiu.
Restrictii si precizari[edit | edit source]
- 1 ⩽ n ⩽ 10000
- prin convenție s-a stabilit că numărul 1 face parte din șirul numerelor regulate.
Exemplul 1[edit | edit source]
- nrregin.txt
- 10
- nrregout.txt
- Datele introduse corespund restrictiilor impuse
- 12 3 4
Exemplul 2[edit | edit source]
- nrrgin.txt
- 17
- Datele introduse nu corespund restrictiilor impuse
Rezolvare[edit | edit source]
<syntaxhighlight lang="python3" line="1"> def cel_mai_mic_divizor_patratic(n):
numere_regulate = [1] while len(numere_regulate) < n: for x in numere_regulate: for d in [2, 3, 5]: if x * d not in numere_regulate: numere_regulate.append(x * d) numere_regulate.sort()
x = numere_regulate[n - 1]
# Determinăm cel mai mic divizor pătratic d = 2 while x % (d ** 2) != 0: d += 1
p = x // (d ** 2) return x, d, p
def verificare_rezultat(x, d, p):
# Adăugăm condițiile de verificare return x % (d ** 2) == 0 and all(x % (f ** 2) == 0 for f in [2, 3, 5])
- Citire date de intrare
with open("nrregin.txt", "r") as file:
n = int(file.readline())
- Calcul și afișare rezultat
rezultat = cel_mai_mic_divizor_patratic(n)
- Verificare rezultat
if verificare_rezultat(*rezultat):
with open("nrregout.txt", "w") as file: file.write(" ".join(map(str, rezultat)) + "\n")
else:
print("Rezultat invalid. Verificați condițiile.")
</syntaxhighlight>
Explicatie[edit | edit source]
Al zecelea număr regulat este 12; numărul minim care îl divide pe 12 pentru a obține un pătrat perfect este 3 iar pătratul perfect este 4.