-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathdad_Euler_234v2.py
51 lines (43 loc) · 1.21 KB
/
dad_Euler_234v2.py
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
import time
import math
import bisect
start=time.time()
def prime_end(n):
q=math.ceil(n**.5)
return bisect.bisect_right(primes,q)
def prime(n):
sieve = [True] * (n/2)
for i in xrange(3,int(n**0.5)+1,2):
if sieve[i/2]:
sieve[i*i/2::i] = [False] * ((n-i*i-1)/(2*i)+1)
return [2]+[2*i+1 for i in xrange(1,n/2) if sieve[i]]
def addition(sett,primesA,N):
tott=0
for p in primesA:
end=(sett[1]//p)*p
if sett[0]%p==0:
begin=sett[0]
else:
begin=sett[0]+p-sett[0]%p
#print begin, end
tott+=(begin+end)*(end/p-begin/p+1)/2
if primesA[0]*primesA[1]<=N:
tott-=primesA[0]*primesA[1]*2
return tott
N=99996666333300000
#N=1000
tott=0
primes=prime(int((N+1)**.5)+100)
zz=prime_end(N)
primes=primes[0:zz+1]
print "Time 1 is ",time.time()-start
answer=0
for p in xrange(0,len(primes)-1):
sett=(primes[p]**2+1,primes[p+1]**2-1)
if sett[1]>N:
sett=(sett[0],N)
primesA=(primes[p],primes[p+1])
subtot=addition(sett,primesA,N)
answer+=subtot
print p,primes[p], primes[p+1],sett,primesA,subtot,answer
print "Time 2 is ",time.time()-start