1797 - Sir Div 3
Cerinţa
Se dă următorul şir de numere naturale: (1, 21, 321, 4321, 54321, 654321, 7654321, 87654321, 987654321, 10987654321, ...). Al x-lea termen este format prin alipirea primelor x numere naturale nenule. Determinaţi câte din primele n numere ale şirului sunt divizibile cu 3.
Date de intrare
Programul citește de la tastatură numărul natural ”numar”.
Date de ieşire
Programul va afișa pe ecran numărul cerut, reprezentând câte din primele n numere din şir sunt divizibile cu 3.
Restricții și precizări
- numar ∈ Ν
- 0 ⩽ numar ⩽ 2.000.000.000
Exemplu
- Intrare
- 3
- Ieșire
- Datele introduse corespund restricțiilor impuse.
- 2
Explicație
Primele 3 numere sunt : 1, 21, 321. Din cele 3 numere doar 2 sunt divizibile cu 3. (21 si 321).
Rezolvare
<syntaxhighlight lang="python" line> def validare_date(numar):
if not isinstance(numar, int): return False if not 0 <= numar <= 2_000_000_000: return False return True
def calc_suma_cifrelor(numar):
suma = 0 while numar > 0: suma += numar % 10 numar //= 10 return suma
def numere_divizibile_cu_3(numar):
count = 0 termen = 0 for i in range(1, numar + 1): termen = termen * 10 + i if calc_suma_cifrelor(termen) % 3 == 0: count += 1 return count
if __name__ == '__main__':
numar = input("Introduceti un numar intreg intre 0 si 2000000000: ") try: numar = int(numar) except ValueError: print("Nu ati introdus un numar intreg!") else: if validare_date(numar): print("Datele de intrare corespund restricțiilor impuse.") print("Numerele divizibile cu 3 sunt:", numere_divizibile_cu_3(numar)) else: print("Numarul introdus nu respecta restricțiile impuse.")
</syntaxhighlight>