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 65 66 67 68 69 70 71 72 73 74 75 76 77
| # -*- coding: cp1252 -*-
import time
if __name__ == "__main__":
try:
import psyco
psyco.full()
except ImportError:
pass
start=time.time()
def premiers(n, p=[2,3,5]):
"""Retourne la liste des nombres premiers <= n (méthode=division)"""
k = p[-1]+2
if n < k:
return [x for x in p if x<=n]
while k <= n:
i = 0
while i < len(p):
if p[i]*p[i] > k:
p.append(k)
break
if (k % p[i]) == 0:
break
i += 1
k += 2
return p
def partiesliste(seq):
p = []
i, imax = 0, 2**len(seq)-1
while i <= imax:
s = []
j, jmax = 0, len(seq)-1
while j <= jmax:
if (i>>j)&1 == 1:
s.append(seq[j])
j += 1
p.append(s)
i += 1
return p
def estpremier(n):
"""estpremier(n): dit si un nombre est premier (renvoie True ou False)"""
if n<7:
if n in (2,3,5):
return True
else:
return False
# si n est pair et >2 (=2: cas traité ci-dessus), il ne peut pas être premier
if n & 1 == 0:
return False
# autres cas
k=3
r=n**0.5
while k<=r:
if n % k == 0:
return False
k+=2
return True
seq=partiesliste(premiers(4000))
c=0
for i in seq:
s=0
for j in range (0,len(i)):
s+=i[j]
if estpremier(s)==True:
c+=1
c=str(c)
l=len(c)
rep=c[0:10]+'-'+c[l-10:l]+'-'+str(l) |
Partager