## Archive for August, 2010

### Calculating Permutations

Sunday, August 22nd, 2010

I recently came across this problem:

Find the only 10 digit number which uses each of the digits 0 – 9 and has the following property: The number formed by the first n digits should be divisible by n. That is

• The first digit should be divisible by 1
• The number formed by the first 2 digits should be divisible by 2.
• The number formed by the first 3 digits should be divisible by 3.
• And so on until the number formed by the first 10 digits should be divisible by 10.

### Project Euler: Problem 11

Thursday, August 19th, 2010

This is problem 11 in Project Euler:

In the 20 x 20 grid below, four numbers along a diagonal line have been marked in red.

08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08
49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00
81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65
52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91
22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80
24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50
32 98 81 28 64 23 67 10 26 38 40 67 59 54 70 66 18 38 64 70
67 26 20 68 02 62 12 20 95 63 94 39 63 08 40 91 66 49 94 21
24 55 58 05 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 72
21 36 23 09 75 00 76 44 20 45 35 14 00 61 33 97 34 31 33 95
78 17 53 28 22 75 31 67 15 94 03 80 04 62 16 14 09 53 56 92
16 39 05 42 96 35 31 47 55 58 88 24 00 17 54 24 36 29 85 57
86 56 00 48 35 71 89 07 05 44 44 37 44 60 21 58 51 54 17 58
19 80 81 68 05 94 47 69 28 73 92 13 86 52 17 77 04 89 55 40
04 52 08 83 97 35 99 16 07 97 57 32 16 26 26 79 33 27 98 66
88 36 68 87 57 62 20 72 03 46 33 67 46 55 12 32 63 93 53 69
04 42 16 73 38 25 39 11 24 94 72 18 08 46 29 32 40 62 76 36
20 69 36 41 72 30 23 88 34 62 99 69 82 67 59 85 74 04 36 16
20 73 35 29 78 31 90 01 74 31 49 71 48 86 81 16 23 57 05 54
01 70 54 71 83 51 54 69 16 92 33 48 61 43 52 01 89 19 67 48

The product of these numbers is 26 × 63 × 78 × 14 = 1788696.

What is the greatest product of four adjacent numbers in any direction (up, down, left, right, or diagonally) in the 20 x 20 grid?

### Project Euler: Problem 10

Thursday, August 12th, 2010

This is problem 10 on Project Euler:

The sum of the primes below 10 is 2 + 3 + 5 + 7 = 17.

Find the sum of all the primes below two million.

### Project Euler: Problem 9

Wednesday, August 11th, 2010

This is Problem 9 on Project Euler:

A Pythagorean triplet is a set of three natural numbers, a < b < c, for which,

a2 + b2 = c2

For example, 32 + 42 = 9 + 16 = 25 = 52.

There exists exactly one Pythagorean triplet for which a + b + c = 1000.
Find the product abc.

Pythagorean triplets can be generated by using the following formulas, where m and n are integers and m is greater than n:

m2 – n2
2mn
m2 + n2

So for the purposes of this problem we are looking for values for m and n where these three formulas add up to 1000, that is:

(m2 – n2) + (2mn) + (m2 + n2) = 1000
This can be simplified to 2m2 + 2mn = 1000
Dividing by 2 and factoring by m we have m(m+n) = 500
Therefore m must be a factor of 500. Calculating m, m + n and n we get the following table:

 m m + n n notes 1 500 499 Reject, because n is greater than m 2 250 248 Reject, because n is greater than m 5 100 95 Reject, because n is greater than m 10 50 40 Reject, because n is greater than m 20 25 5 A solution 25 20 -5 Reject, because n cannot be negative 50 10 -40 Reject, because n cannot be negative 100 5 -95 Reject, because n cannot be negative 250 2 -248 Reject, because n cannot be negative 500 1 -499 Reject, because n cannot be negative

Therefore the only solution is where m = 20 and n = 5. Plugging these values into our original expressions we have:

a = m2 – n2 = (20 * 20) – (5 * 5) = 375

b = 2mn = 2 * 20 * 5 = 200

c = m2 + n2 = (20 * 20) + (5 * 5) = 425

a + b + c = 1000 and 2 + b2 = c2, so the answer to the problem is a * b * c.

We have not had to use a computer to solve this problem, but a brute-force approach in Delphi could be this:

```procedure TfrmMain.Problem9;
var
a, b, c : integer;
begin
for a := 1 to 998 do begin
for b := a + 1 to 999 do begin
c := 1000 - (a + b);
if (a * a) + (b * b) = (c * c) then begin
ShowMessage(IntToStr(a * b * c));
exit;
end;
end;
end;
end;```

This code just generates sets of numbers where a + b + c = 1000 and then checks the set for being a Pythagorean triple. If it is, the product is displayed. There are no optimizations in this code, which could be improved considerably.