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)


result 6857 returned after 37.310863018 seconds (100,000 iterations).

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]:
1

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


25502500 338350 25164150

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)


142913828922

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])


104743

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]:
array([ 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, 78, 79, 80, 81, 82, 83, 84, 85,
       86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99])

In [ ]: