если у вас есть какой-то генератор primes()
, вы можете сделать это:
is_prime_var = 0
MAX = 1 << 5
last_p = 0
for p in primes():
if p > MAX:
break
print(p, p-last_p)
is_prime_var <<= (p - last_p)
is_prime_var |= 1
last_p = p
is_prime_var <<= (MAX - last_p - 1)
теперь местоположения простых чисел сохраняются (в обратном порядке) в целых числах is_prime_var
.
тогда выражение (is_prime >> (MAX-n-1)) & 1
будет 1
, если n
является простым;0
в противном случае:
def is_prime(n):
return bool((is_prime_var >> (MAX-n-1)) & 1)
вы можете использовать primes()
из этот превосходный ответ в качестве основного генератора.
thers также этот мой ответ о быстром и эффективном по отношению к памяти сите из эратосфена.также может быть интересно.