"""
zero_bits_every_step(number, step)
----------------------------------
Zeros every `step`-th bit (0-based from LSB)
but only if that bit is currently 1.
Example:
number = 536870911
step = 3 → zero bits 0, 3, 6, 9, ...
"""
def zero_bits_every_step(number: int, step: int) -> int:
result = number
for pos in range(0, 32, step):
mask = 1 << pos
# If the bit is 1, zero it
if result & mask:
result &= ~mask
return result
"""
print_binary(n)
---------------
Prints a 32-bit binary representation of an integer.
"""
def print_binary(n: int) -> None:
s = format(n, "032b")
grouped = " ".join(s[i:i+4] for i in range(0, 32, 4))
print(grouped)
def main():
number = 536870911 # 0001 1111 1111 1111 1111 1111 1111 1111
step = 3 # zero bits 0, 3, 6, 9, ...
print("Original number in binary:")
print_binary(number)
result = zero_bits_every_step(number, step)
print("\nNumber after zeroing every", step, "bits (only if bit was 1):")
print_binary(result)
print("\nResult as integer:", result)
if __name__ == "__main__":
main()
"""
run:
Original number in binary:
0001 1111 1111 1111 1111 1111 1111 1111
Number after zeroing every 3 bits (only if bit was 1):
0001 0110 1101 1011 0110 1101 1011 0110
Result as integer: 383479222
"""