-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy patheuler548-1.py
65 lines (54 loc) · 923 Bytes
/
euler548-1.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
58
59
60
61
62
63
64
65
# prime : val = 1
# otherwise : sigma ( F(divisors != 1,n))
import time;
t1 = time.time();
def sieve(n):
j=2
k=0
yolist=[1]*n
while j**2<n:
k=j**2
while k<n:
yolist[k]=0
k += j
j += 1
while yolist[j]==0:
j += 1
return yolist
# 1 = true,0 = false
def primelist(l,u):
i = l
ans=[]
sieve_n=sieve(u + 1)
if i == 1:
i = 2
while i <= u:
if sieve_n[i]:
ans.append(i)
i += 1
return ans
plist = primelist(1,10**7)
print len(plist)
# cant find primes till 10**16 as such.
gn = {}
gn[1] = 1
for elem in plist:
gn[elem] = 1
gn[4] = 2
# initial primes covered.
def f(n):
global gn
if not gn.has_key(n):
x = 0
for x in (2,(n/2) + 3):
if (n%x == 0):
x += f(x)
gn[n] = x
return gn[n]
such_no = 0;
for i in xrange(1,10**8):
if f(i) == i:
such_no += i
t2 = time.time();
print such_no
print "time : ", t2 - t1