-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathdad_Euler578v2.py
57 lines (47 loc) · 1.21 KB
/
dad_Euler578v2.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
52
53
54
55
56
57
import time
def sieve(n):
nums = [[] for x in xrange(n)]
prime = 2
while prime < n:
power = prime
while power < n:
multiple = power
while multiple < n:
nums[multiple].append(prime)
multiple += power
power *= prime
k = prime + 1
if k >= n: # no primes left!!!
return nums
while len(nums[k]) > 0:
k += 1
if k >= n: # no primes left!!!
return nums
prime = k
return nums
start = time.time()
N=10**5
NN=int((N**.5)/2.0)
sett=sieve(N)
#print sett
for i in xrange(0,len(sett)):
Q=list(set(sett[i]))
Q.sort()
A=[]
for q in Q:
A.append((q,sett[i].count(q)))
sett[i]=A
#print sett
tott=0
for i in xrange(0,len(sett)):
if len(sett[i])<2:
continue
#print i,j,sett[i], len(sett[i])
for j in xrange(0,len(sett[i])-1):
#print i,j,
if sett[i][j][1]<sett[i][j+1][1]:
tott+=1
#print i,j,sett[i],tott
break
time_taken = time.time()-start
print tott,N-tott,round(time_taken,2)