In [1]:
# problem 3
import time
def largest_prime_factor(n):
largest_factor = 1
# remove any factors of 2 first
while n % 2 == 0:
largest_factor = 2
n = n/2
# now look at odd factors
p = 3
while n != 1:
while n % p == 0:
largest_factor = p
n = n/p
p += 2
return largest_factor
start = time.time()
for i in range(100000): a = largest_prime_factor(600851475143)
elapsed = (time.time() - start)
print "result %s returned after %s seconds (100,000 iterations)." % (a, elapsed)
In [ ]:
# problem 1
sum(range(3,1000,3)) + sum(range(5,1000,5)) - sum(range(15,1000,15))
In [ ]:
# problem 2
fibonacci_numbers = [0, 1]
even_fib = []
total = 0
for i in range(2,100):
new_number = fibonacci_numbers[i-1]+fibonacci_numbers[i-2]
if new_number > 4000000:
break
fibonacci_numbers.append(new_number)
if new_number %2 == 0:
even_fib.append(new_number)
print even_fib
print sum(even_fib)
In [ ]:
# problem 4
def isPalindrome(a):
b = a
reversed = 0
if a < 0:
return("We are not processing negative numbers: "+ str(a))
elif b < 10:
print("There is no point in reversing the digit: ", a)
else:
while b > 0:
tail = b % 10
reversed = reversed*10 + tail
b //= 10
if reversed == a:
return True #return("Reversed number equals the initial number: "+ str(a))
else:
return False #return("Reversed number is NOT the same as initial number: "+ str(a))
n = 999
m = 999
largest = 0
while n >= 900:
while m >= 900:
prod = n*m
#print "%s * %s = %s", n,m,prod
if isPalindrome(prod) :
print "%d * %d = %d" % (n,m,prod)
if prod > largest :
largest = prod
m=m-1
m = 999
n=n-1
print largest
In [4]:
# problem 5
def getPrime(n):
if n==2: return [2]
elif n<2: return []
s=range(3,n+1,2)
mroot = n ** 0.5
half=(n+1)/2-1
i=0
m=3
while m <= mroot:
if s[i]:
j=(m*m-3)/2
s[j]=0
while j<half:
s[j]=0
j+=m
i=i+1
m=2*i+3
return [2]+[x for x in s if x]
5%2
Out[4]:
In [ ]:
In [14]:
#problem 6
t = sum(range(1,101)) ** 2
s=0
for i in range(1,101):
s = s + i**2
print t, s, t-s
In [3]:
# Problem 10
def getPrime(n):
if n==2: return [2]
elif n<2: return []
s=range(3,n+1,2)
mroot = n ** 0.5
half=(n+1)/2-1
i=0
m=3
while m <= mroot:
if s[i]:
j=(m*m-3)/2
s[j]=0
while j<half:
s[j]=0
j+=m
i=i+1
m=2*i+3
return [2]+[x for x in s if x]
sPr= sum(getPrime(2000000))
print(sPr)
In [7]:
#problem 7
def getPrime(n):
if n==2: return [2]
elif n<2: return []
s=range(3,n+1,2)
mroot = n ** 0.5
half=(n+1)/2-1
i=0
m=3
while m <= mroot:
if s[i]:
j=(m*m-3)/2
s[j]=0
while j<half:
s[j]=0
j+=m
i=i+1
m=2*i+3
return [2]+[x for x in s if x]
sPr = getPrime(200000)
print(sPr[10000])
In [20]:
#problem 9
import numpy as np
def check(a,b,c):
if (a + b + c) <> 1000: return False
if (a*a + b*b) <> (c*c): return False
return true;
a = np.arange(1,100)
b = np.arange(1,100)
c = np.arange(1,100)
type(a)
a
#check(a,b,c)
Out[20]:
In [ ]: