Project Euler

Status
Not open for further replies.

MetalShaun

Level 1
Thread author
Mar 3, 2011
424
Hello Chaps!

Here is a great site/project that is fun for all programmers and mathematicians when you have some spare time to kill.

http://projecteuler.net/

Simply, This site contains various math problems to solve using a programming language (any language you choose).

When there hasn't much to do at work I have been completing some using Python and I thought i would update this thread with code as i complete problems and hopefully get you guys submitting your solutions.

NOTE: The idea is to complete these problems as efficiently and elegantly as possible and to not just brute force it

I have made the code text white to not spoil it for people that want to have a go before looking at my code (obv if you don't use the default theme this wont apply to you)

Also if there is a way to toggle the display of the code box's could you tell me how, I know how to do it with java script but the forum doesn't allow it.

Problem 1 - Python
Code:
total = 0

for n in range(3, 1000):
    if n % 3 == 0:
        total = total + n
    elif n % 5 == 0:
        total = total + n      
        
print total

Problem 2 - Python
Code:
result = [] 
answer = 0
a, b = 0, 1

while b < 4000000:
    result.append(b)
    a, b = b, a+b

for i in result:
    if i % 2 == 0:
        answer = answer + i
    
print answer

Problem 3 - Python
Code:
num = 600851475143
factor = 3
min_factor = 1

def find_factor(num, factor):
	found_factor = "false" 
	while factor <= num and found_factor == "false":
		if num % factor == 0:
			found_factor = "true"
		else:
			factor = factor + 2
	print "factor: %i" % factor
	return factor

while num > 1:
	min_factor = find_factor(num, factor)
	num = num/min_factor
print "Max factor is %i" % min_factor

Problem 4 - Python
Code:
def palandromic(num):
    test = "false"
    num_string = str(num)
    num_string_reversed = num_string[::-1]
    num_int_reversed = int(num_string_reversed)
    if num == num_int_reversed:
        test = "true"
    return test

answer = 0

for x in range(100, 999):
    for y in range(100, 999):
        num = x * y
        if palandromic(num) == "true" and num > answer:
            answer = num
            print answer

Problem 5 - Python
Code:
counter = 2520
test = "true"

while test == "true":
    for i in range(1, 20):
        if counter % i != 0:
            counter = counter + 20
            break
    else:
        print counter
        test = "false"

Problem 6 - Python
Code:
total1, total2 = 0, 0

for i in range(1, 101):
    total1 = total1 + int(i*i)
    total2 = total2 + i

total2 = total2 * total2
answer = total2 - total1
print answer

Problem 7 - Python
Code:
counter, n = 0, 1
while counter < 10001:
    n = n + 1
    for x in range (2, int((n**0.5)+1)):
        if n % x == 0:
            break
    else:
        counter = counter + 1
        if counter == 10001:
            print n

Problem 8 - Python
Code:
num = 7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450

num_string = str(num)
last_product = len(num_string)

index1 = 0
index2 = 1
index3 = 2
index4 = 3
index5 = 4

answer = 0
product = 0

while index5 < last_product:
    product = int(int(num_string[index1])*int(num_string[index2])*int(num_string[index3])*int(num_string[index4])*int(num_string[index5]))
    index1 += 1
    index2 += 1
    index3 += 1
    index4 += 1
    index5 += 1    
    if product > answer:
        answer = product

print answer

Problem 9 - Python
Code:
for a in range(1, 500):
    for b in range(1, 500):
        for c in [1000-b-a]:
            if a * a + b * b == c * c and a < b and b < c:
                print a * b * c

Problem 10 - Python
Code:
sum, n = 0, 1
while n < 2000000:
    n = n + 1
    for x in range (2, int((n**0.5)+1)):
        if n % x == 0:
            break
    else:
        sum = sum + n

print sum
There's 10 for now I will post up my other completed problems later.

Cheers :)
 

McLovin

Level 76
Verified
Honorary Member
Malware Hunter
Apr 17, 2011
9,224
Wish I knew about this earlier. Would of been great for the course that I have done. :)
 

MetalShaun

Level 1
Thread author
Mar 3, 2011
424
A work colleague introduced me to it, its been very helpful for learning python.
 

McLovin

Level 76
Verified
Honorary Member
Malware Hunter
Apr 17, 2011
9,224
That's what we were learning as well. Well good I guess to use in the future :)
 

MetalShaun

Level 1
Thread author
Mar 3, 2011
424
Problem 11
Code:
grid = [8, 02, 22, 97, 38, 15, 00, 40, 00, 75, 04, 05, 07, 78, 52, 12, 50, 77, 91, 8,  #1
        49, 49, 99, 40, 17, 81, 18, 57, 60, 87, 17, 40, 98, 43, 69, 48, 04, 56, 62, 00,#2
        81, 49, 31, 73, 55, 79, 14, 29, 93, 71, 40, 67, 53, 88, 30, 03, 49, 13, 36, 65,#3
        52, 70, 95, 23, 04, 60, 11, 42, 69, 24, 68, 56, 01, 32, 56, 71, 37, 02, 36, 91,#4
        22, 31, 16, 71, 51, 67, 63, 89, 41, 92, 36, 54, 22, 40, 40, 28, 66, 33, 13, 80,#5
        24, 47, 32, 60, 99, 03, 45, 02, 44, 75, 33, 53, 78, 36, 84, 20, 35, 17, 12, 50,#6
        32, 98, 81, 28, 64, 23, 67, 10, 26, 38, 40, 67, 59, 54, 70, 66, 18, 38, 64, 70,#7
        67, 26, 20, 68, 02, 62, 12, 20, 95, 63, 94, 39, 63, 8, 40, 91, 66, 49, 94, 21, #8
        24, 55, 58, 05, 66, 73, 99, 26, 97, 17, 78, 78, 96, 83, 14, 88, 34, 89, 63, 72,#9
        21, 36, 23, 9, 75, 00, 76, 44, 20, 45, 35, 14, 00, 61, 33, 97, 34, 31, 33, 95, #10
        78, 17, 53, 28, 22, 75, 31, 67, 15, 94, 03, 80, 04, 62, 16, 14, 9, 53, 56, 92, #11
        16, 39, 05, 42, 96, 35, 31, 47, 55, 58, 88, 24, 00, 17, 54, 24, 36, 29, 85, 57,#12
        86, 56, 00, 48, 35, 71, 89, 07, 05, 44, 44, 37, 44, 60, 21, 58, 51, 54, 17, 58,#13
        19, 80, 81, 68, 05, 94, 47, 69, 28, 73, 92, 13, 86, 52, 17, 77, 04, 89, 55, 40,#14
        04, 52, 8, 83, 97, 35, 99, 16, 07, 97, 57, 32, 16, 26, 26, 79, 33, 27, 98, 66, #15
        88, 36, 68, 87, 57, 62, 20, 72, 03, 46, 33, 67, 46, 55, 12, 32, 63, 93, 53, 69,#16
        04, 42, 16, 73, 38, 25, 39, 11, 24, 94, 72, 18, 8, 46, 29, 32, 40, 62, 76, 36, #17
        20, 69, 36, 41, 72, 30, 23, 88, 34, 62, 99, 69, 82, 67, 59, 85, 74, 04, 36, 16,#18
        20, 73, 35, 29, 78, 31, 90, 01, 74, 31, 49, 71, 48, 86, 81, 16, 23, 57, 05, 54,#19
        01, 70, 54, 71, 83, 51, 54, 69, 16, 92, 33, 48, 61, 43, 52, 01, 89, 19, 67, 48]#20


last_product = len(grid)

#right
index1 = 0
index2 = 1
index3 = 2
index4 = 3

answer, product = 0, 0

while index4 < last_product:
    product = int(int(grid[index1])*int(grid[index2])*int(grid[index3])*int(grid[index4]))
    index1 += 1
    index2 += 1
    index3 += 1
    index4 += 1    
    if product > answer:
        answer = product

#down
index5 = 0
index6 = 20 
index7 = 40
index8 = 60

while index8 < last_product:
    product = int(int(grid[index5])*int(grid[index6])*int(grid[index7])*int(grid[index8]))
    index5 += 1
    index6 += 1
    index7 += 1
    index8 += 1    
    if product > answer:
        answer = product

#diag right
index9 = 0
index10 = 21
index11 = 42
index12 = 63

for x in range(1,17):
    for y in range(1,17):
        product = int(int(grid[index9])*int(grid[index10])*int(grid[index11])*int(grid[index12]))        
        index9 += 1
        index10 += 1
        index11 += 1
        index12 += 1
        if product > answer:
            answer = product
    index9 += 4
    index10 += 4
    index11 += 4
    index12 += 4

#diag left
index13 = 3
index14 = 22
index15 = 41
index16 = 60

for a in range(1,17):
    for b in range(1,17):
        product = int(int(grid[index13])*int(grid[index14])*int(grid[index15])*int(grid[index16]))        
        index13 += 1
        index14 += 1
        index15 += 1
        index16 += 1
        if product > answer:
            answer = product
    index13 += 4
    index14 += 4
    index15 += 4
    index16 += 4
        
print answer

Problem 12
Code:
num = 1
while True:
    tri_num = int((num*(num+1))/2)
    if tri_num % 2 == 0 and tri_num % 3 == 0 and tri_num % 5 == 0 and tri_num % 7 == 0 and tri_num % 11 == 0:
        factors = [i for i in xrange(1, int(tri_num*0.5)+1) if tri_num % i == 0]
        num += 1
        if len(factors)+1 >= 500:
            print tri_num
            break
    else:
        num += 1

Problem 13
Code:
num = [ 
37107287533902102798797998220837590246510135740250, \
46376937677490009712648124896970078050417018260538, \
74324986199524741059474233309513058123726617309629, \
91942213363574161572522430563301811072406154908250, \
23067588207539346171171980310421047513778063246676, \
89261670696623633820136378418383684178734361726757, \
28112879812849979408065481931592621691275889832738, \
44274228917432520321923589422876796487670272189318, \
47451445736001306439091167216856844588711603153276, \
70386486105843025439939619828917593665686757934951, \
62176457141856560629502157223196586755079324193331, \
64906352462741904929101432445813822663347944758178, \
92575867718337217661963751590579239728245598838407, \
58203565325359399008402633568948830189458628227828, \
80181199384826282014278194139940567587151170094390, \
35398664372827112653829987240784473053190104293586, \
86515506006295864861532075273371959191420517255829, \
71693888707715466499115593487603532921714970056938, \
54370070576826684624621495650076471787294438377604, \
53282654108756828443191190634694037855217779295145, \
36123272525000296071075082563815656710885258350721, \
45876576172410976447339110607218265236877223636045, \
17423706905851860660448207621209813287860733969412, \
81142660418086830619328460811191061556940512689692, \
51934325451728388641918047049293215058642563049483, \
62467221648435076201727918039944693004732956340691, \
15732444386908125794514089057706229429197107928209, \
55037687525678773091862540744969844508330393682126, \
18336384825330154686196124348767681297534375946515, \
80386287592878490201521685554828717201219257766954, \
78182833757993103614740356856449095527097864797581, \
16726320100436897842553539920931837441497806860984, \
48403098129077791799088218795327364475675590848030, \
87086987551392711854517078544161852424320693150332, \
59959406895756536782107074926966537676326235447210, \
69793950679652694742597709739166693763042633987085, \
41052684708299085211399427365734116182760315001271, \
65378607361501080857009149939512557028198746004375, \
35829035317434717326932123578154982629742552737307, \
94953759765105305946966067683156574377167401875275, \
88902802571733229619176668713819931811048770190271, \
25267680276078003013678680992525463401061632866526, \
36270218540497705585629946580636237993140746255962, \
24074486908231174977792365466257246923322810917141, \
91430288197103288597806669760892938638285025333403, \
34413065578016127815921815005561868836468420090470, \
23053081172816430487623791969842487255036638784583, \
11487696932154902810424020138335124462181441773470, \
63783299490636259666498587618221225225512486764533, \
67720186971698544312419572409913959008952310058822, \
95548255300263520781532296796249481641953868218774, \
76085327132285723110424803456124867697064507995236, \
37774242535411291684276865538926205024910326572967, \
23701913275725675285653248258265463092207058596522, \
29798860272258331913126375147341994889534765745501, \
18495701454879288984856827726077713721403798879715, \
38298203783031473527721580348144513491373226651381, \
34829543829199918180278916522431027392251122869539, \
40957953066405232632538044100059654939159879593635, \
29746152185502371307642255121183693803580388584903, \
41698116222072977186158236678424689157993532961922, \
62467957194401269043877107275048102390895523597457, \
23189706772547915061505504953922979530901129967519, \
86188088225875314529584099251203829009407770775672, \
11306739708304724483816533873502340845647058077308, \
82959174767140363198008187129011875491310547126581, \
97623331044818386269515456334926366572897563400500, \
42846280183517070527831839425882145521227251250327, \
55121603546981200581762165212827652751691296897789, \
32238195734329339946437501907836945765883352399886, \
75506164965184775180738168837861091527357929701337, \
62177842752192623401942399639168044983993173312731, \
32924185707147349566916674687634660915035914677504, \
99518671430235219628894890102423325116913619626622, \
73267460800591547471830798392868535206946944540724, \
76841822524674417161514036427982273348055556214818, \
97142617910342598647204516893989422179826088076852, \
87783646182799346313767754307809363333018982642090, \
10848802521674670883215120185883543223812876952786, \
71329612474782464538636993009049310363619763878039, \
62184073572399794223406235393808339651327408011116, \
66627891981488087797941876876144230030984490851411, \
60661826293682836764744779239180335110989069790714, \
85786944089552990653640447425576083659976645795096, \
66024396409905389607120198219976047599490197230297, \
64913982680032973156037120041377903785566085089252, \
16730939319872750275468906903707539413042652315011, \
94809377245048795150954100921645863754710598436791, \
78639167021187492431995700641917969777599028300699, \
15368713711936614952811305876380278410754449733078, \
40789923115535562561142322423255033685442488917353, \
44889911501440648020369068063960672322193204149535, \
41503128880339536053299340368006977710650566631954, \
81234880673210146739058568557934581403627822703280, \
82616570773948327592232845941706525094512325230608, \
22918802058777319719839450180888072429661980811197, \
77158542502016545090413245809786882778948721859617, \
72107838435069186155435662884062257473692284509516, \
20849603980134001723930671666823555245252804609722, \
53503534226472524250874054075591789781264330331690]

total = str(sum(num))[0:10]
print total

Problem 14
Code:
def chain_gen(n):
    chain = [n]
    while n > 1:
        if n % 2 == 0:
            n = n/2
            chain.append(n)
        else:
            n = (3*n)+1
            chain.append(n)

    return chain
        
answer, max_chain, start = 0, 0, 999999

while start > 1:
    chain_length = len(chain_gen(start))
    if chain_length > max_chain:
        max_chain = chain_length
        answer = start
    start -= 1

print answer

Problem 15
Code:
import math

routes = lambda n, r : (math.factorial(n)/(math.factorial(r)*math.factorial(n - r)))

print routes(40, 20)
 
Status
Not open for further replies.

About us

  • MalwareTips is a community-driven platform providing the latest information and resources on malware and cyber threats. Our team of experienced professionals and passionate volunteers work to keep the internet safe and secure. We provide accurate, up-to-date information and strive to build a strong and supportive community dedicated to cybersecurity.

User Menu

Follow us

Follow us on Facebook or Twitter to know first about the latest cybersecurity incidents and malware threats.

Top