Выясните, что представляет собой значение М с повторяющейся последовательностью. (например, 3 = 101) Отрежьте хвостовую часть числа, которое вы тестируете, по одному шагу за раз с помощью x / 2 или x >> 1 и посмотрите, соответствует ли длина остатка, которую вы заботите (тест% (1 << m) == 101) </p>
Редактировать: В Python ...
binary = lambda i, c = (lambda i, c: i and (c(i >> 1, c) + str(i & 1)) or ''): c(i, c)
def SilentsHomework(M, N):
count, base = 0, int(''.join([str([0,1,0][(-1)**x]) for x in xrange(N)]),2)>>(N-M)
for i in xrange(1,1<<N):
orig_i_nal = i
while i:
if i%(1<<M)==base: count += 1; print binary(orig_i_nal); break
else: i >>= 1
Струны, проверьте. Массивы, проверьте. Рекурсия, нету :(