Nпервых простых чисел представляются в двоичной системе счисления и записываются подряд. из полученной последовательности нулей и единиц формируется числовая последовательность, каждый элемент которой представляет количество нулей, идущих подряд. например, для n = 10 этими простыми числами являются 2, 3, 5, 7, 11, 13, 17, 19, 23, 29. записанные подряд двоичные представления этих чисел – . сформированная по заданному правилу последовательность имеет вид 1, 1, 1, 1, 3, 2, 1, 1. тогда для n = 1000 максимальный элемент вновь сформированной последовательности будет иметь значение …
Код на python 3.5:
from itertools import groupby
n = 1000
primes = [2, 3]
i = 1
while True:
if all((6 * i - 1) % p != 0 for p in primes):
primes.append(6 * i - 1)
if len(primes) == n:
break
if all((6 * i + 1) % p != 0 for p in primes):
primes.append(6 * i + 1)
if len(primes) == n:
break
i += 1
bin_string = ''.join(list(map(lambda p: bin(p)[2:], primes)))
lengths = [len(list(g)) for k, g in groupby(bin_string) if k == '0']
print(max(lengths))