1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
| import math, time
def b_primes(n):
if n < 2:
return
yield 2
racine = math.sqrt(n)
liste = [True]*((n-1)//2) # only odd numbers, starting from 3.
for i,v in enumerate(liste):
if v:
ri = (i*2)+3 # the real number.
yield ri
if ri <= racine:
liste[i::ri] = [False] * (((n//ri)+1)//2)
def primes(n):
liste = [True]*(n+1)
liste[0:2] = [False,False] # 0 and 1 are not primes
racine = math.sqrt(n)
for i,v in enumerate(liste):
if v:
yield i
if i <= racine:
liste[i::i] = [False]* (n//i)
def eratosthene(n):
premiers=[True]*(n+1) #a priori tous premiers
premiers[0]=False #0 n'est pas premier
premiers[1]=False # 1 non plus
racine=math.sqrt(n) #la borne pour les tests
i=2
while i <= racine:
k=2
while k*i<=n:
premiers[k*i]=False # tous les multiples de i ne peuvent etre premiers, on raye
k=k+1
for j in range(i+1,n+2):# on repart avec le premier non raye
if premiers[j]:
i=j
break
return premiers
def main():
n = int(input("saisir un entier : "))
start = time.time()
prems = eratosthene(n)
res = [i for i in range(0,n+1) if prems[i]]
# print(res)
print "(eratosthene:", time.time()-start, "secondes)"
# print("(eratosthene:", time.time()-start, "secondes)")
start = time.time()
res = [i for i in primes(n)]
# print(res)
print "(primes:", time.time()-start, "secondes)"
# print("(primes:", time.time()-start, "secondes)")
start = time.time()
res = [i for i in primes(n)]
# print(res)
print "(b_primes:", time.time()-start, "secondes)"
# print("(b_primes:", time.time()-start, "secondes)")
if __name__ == '__main__':
main() |
Partager