1912 - Becuri
Cerința
Chris vă propune un joc cu becuri.
- în joc sunt n becuri
- inițial toate cele n becuri au culoarea albastru
- fiecare bec poate avea doar două culori: roșu sau albastru
- se efectuează n parcurgeri, pentru k de la 1 la n. La parcurgerea de rang k, se schimbă culoarea fiecărui bec situat pe poziţii având indicii multipli de k, din roşu în albastru şi invers.
Știind numărul n de becuri, să se afișeze numărul de becuri care au culoarea roșie după terminarea jocului.
Date de intrare
Fișierul de intrare becuriin.txt conține pe prima linie numărul de becuri n.
Date de ieșire
Fișierul de ieșire becuriout.txt va conține pe prima linie numărul de becuri care au culoarea roșie după terminarea jocului.
Restricții și precizări
- numerotarea pozițiilor becurilor începe cu 1
- 1 ⩽ n ⩽ 10^9
Exemplul 1
- Intrare
- becuriin.txt
- 6
- Ieșire
- Datele de intrare corespund restricțiilor impuse
- becuriout.txt
- 2
Exemplul 2
- Intrare
- becuriin.txt
- 10
- Ieșire
- Datele de intrare corespund restricțiilor impuse
- becuriout.txt
- 3
Exemplul 3
- Intrare
- becuriin.txt
- 18
- Ieșire
- Datele de intrare corespund restricțiilor impuse
- becuriout.txt
- 4
Exemplul 4
- Intrare
- becuriin.txt
- 0
- Ieșire
- Datele de intrare NU corespund restricțiilor impuse
Rezolvare
<syntaxhighlight lang="python" line>
- 1912 - Becuri
def validare_date(n):
if not (1 <= n <= 10**9): return False return True
def numar_becuri_rosii(n):
becuri = [0] * (n + 1)
for k in range(1, n + 1): for i in range(k, n + 1, k): becuri[i] = 1 - becuri[i]
return sum(becuri)
with open("becuriin.txt", "r") as f:
n = int(f.readline().strip())
if validare_date(n):
print("Datele de intrare corespund restricțiilor impuse")
rezultat = numar_becuri_rosii(n) with open("becuriout.txt", "w") as f: f.write(str(rezultat) + "\n")
else:
print("Datele de intrare NU corespund restricțiilor impuse") exit(0)
</syntaxhighlight>