domingo, 16 de octubre de 2016

Euler #8, #9 y #10

https://projecteuler.net/problem=8

Sencillo problema, lo más fácil es tratar el número tan largo que proponen como un string e ir tomando "porciones" de 13 caracteres y sumándolas, guardándonos la mayor suma. Implementación en Python.

   1 
2 number = "7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450"
3
4 biggest = ""
5 product = 0
6 length = 13
7
8 count = 0
9 portion = number[count:count+length]
10 while len(portion) == length:
11 temp = 1
12 for d in portion:
13 temp *= int(d)
14 if temp > product:
15 product = temp
16 biggest = portion
17 count += 1
18 portion = number[count:count+length]
19
20 print ("Biggest: " + biggest + ", product: " + str(product))
21







https://projecteuler.net/problem=9

Implementación en JavaScript
   1 var SUM = 1000
2 for (var a = 1; a < SUM; a++) {
3 for (var b = a + 1; b < SUM; b++) {
4 c2 = a*a + b*b;
5 c = Math.sqrt(c2)
6 if (Math.round(c) == c) { // Pythagorean triplet
7 if (a + b +c == SUM) {
8 console.log("Triplet: ", a, b, c, "Product: ", a*b*c);
9 process.exit(0);
10 }
11 }
12 }
13 }
14






https://projecteuler.net/problem=10

Utilizamos la función sum de Python para efectuar la suma de todos los números. El problema principal es tener una función generadora de números primos. La que se propone es una sencilla criba de Eratóstenes.
   1 import math
2
3 def isPrime(n):
4 if n == 2:
5 return True
6 if n < 2 or n % 2 == 0:
7 return False;
8 max = int(math.sqrt(n));
9 for i in range(3, max+1, 2):
10 if n % i == 0:
11 return False
12 return True
13
14
15 def primeGenerator(n):
16 """Generates prime numbers < n"""
17 primes = [2]
18 if n > 2:
19 candidates = [c for c in range(3, n, 2)]
20 for test in range(3, int(math.sqrt(n))+1, 2):
21 for c in candidates:
22 if c > test and c % test == 0:
23 candidates.remove(c)
24 primes += candidates
25 return primes
26
27 if __name__ == '__main__':
28 primes = primeGenerator(2000000)
29 print sum(primes)
30


 

No hay comentarios:

Publicar un comentario