2487 - countbits: Difference between revisions
Pagină nouă: Se consideră un șir de numere naturale f[1], f[2], …, f[n]. Fiecărui element al șirului i se calculează numărul biților de 1 din reprezentarea în baza 2. De exemplu, numărul 15 are 4 biți de 1 în baza 2. ==Cerința== Să se determine numărul total de biți de 1 al tuturor numerelor din șir. ==Date de intrare== Fișierul de intrare countbits.in conține pe prima linie numerele n, A, B, C, D, E, unde n este numărul elementelor șirului. Șirul se va genera ast... |
No edit summary |
||
Line 23: | Line 23: | ||
17 | 17 | ||
==Rezolvare== | ==Rezolvare== | ||
<syntaxhighlight lang="python3"> | |||
def count_set_bits(num): | def count_set_bits(num): | ||
count = 0 | |||
while num: | |||
count += num & 1 | |||
num >>= 1 | |||
return count | |||
Citire date de intrare | |||
with open("countbits.in", "r") as file: | with open("countbits.in", "r") as file: | ||
n, A, B, C, D, E = map(int, file.readline().split()) | |||
total_bits = 0 | Generare șir și calcul număr total de biți de 1 | ||
f = [A, B] | |||
for i in range(3, n + 1): | total_bits = 0 f = [A, B] for i in range(3, n + 1): | ||
next_element = 1 + (f[i - 2] * C + f[i - 1] * D) % E | |||
f.append(next_element) | |||
total_bits += count_set_bits(next_element) | |||
Scrierea rezultatului în fișierul de ieșire | |||
with open("countbits.out", "w") as file: | with open("countbits.out", "w") as file: | ||
file.write(str(total_bits) + "\n") | |||
</syntaxhighlight> |
Revision as of 17:20, 11 January 2024
Se consideră un șir de numere naturale f[1], f[2], …, f[n]. Fiecărui element al șirului i se calculează numărul biților de 1 din reprezentarea în baza 2. De exemplu, numărul 15 are 4 biți de 1 în baza 2.
Cerința
Să se determine numărul total de biți de 1 al tuturor numerelor din șir.
Date de intrare
Fișierul de intrare countbits.in conține pe prima linie numerele n, A, B, C, D, E, unde n este numărul elementelor șirului. Șirul se va genera astfel: f[1] = A, f[2] = B, apoi pentru orice i = 3..n, f[i] = 1 + (f[i-2] * C + f[i-1] * D) % E.
Date de ieșire
Fișierul de ieșire countbits.out va conține pe prima linie un singur număr, reprezentând numărul total de biți de 1 al tuturor numerelor din șir.
Restricții și precizări
3 ≤ n ≤ 15 000 000 3 ≤ A, B, C, D ≤ 100 000 000 3 ≤ E ≤ 1 000 000 000 Atenție la generarea elementelor șirului ==Exemplu==: countbits.in
4 7 11 15 19 8999 countbits.out
17
Rezolvare
<syntaxhighlight lang="python3"> def count_set_bits(num):
count = 0 while num: count += num & 1 num >>= 1 return count
Citire date de intrare
with open("countbits.in", "r") as file:
n, A, B, C, D, E = map(int, file.readline().split())
Generare șir și calcul număr total de biți de 1
total_bits = 0 f = [A, B] for i in range(3, n + 1):
next_element = 1 + (f[i - 2] * C + f[i - 1] * D) % E f.append(next_element) total_bits += count_set_bits(next_element)
Scrierea rezultatului în fișierul de ieșire
with open("countbits.out", "w") as file:
file.write(str(total_bits) + "\n")
</syntaxhighlight>