30 lines
805 B
Python
30 lines
805 B
Python
def is_prime(N):
|
|
if N < 2:
|
|
return False
|
|
for p in [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]:
|
|
if N % p == 0: return N == p
|
|
d = N - 1
|
|
s = 0
|
|
while d % 2 == 0:
|
|
d >>= 1
|
|
s += 1
|
|
for a in [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]:
|
|
if a >= N: continue
|
|
x = pow(a, d, N)
|
|
if x == 1 or x == N - 1: continue
|
|
for _ in range(s - 1):
|
|
x = pow(x, 2, N)
|
|
if x == N - 1: break
|
|
else: return False
|
|
return True
|
|
|
|
def primes(B):
|
|
primes_list = []
|
|
is_prime = [True] * (B + 1)
|
|
is_prime[0] = is_prime[1] = False
|
|
for p in range(2, B + 1):
|
|
if is_prime[p]:
|
|
primes_list.append(p)
|
|
for i in range(p * p, B + 1, p):
|
|
is_prime[i] = False
|
|
return primes_list |