#### 11 Jun 2011 maragato»(Master)

Euler 9 in C

So I recently wrote an ugly solution to Project Euler’s problem #9. It was written in Python and even though every other Project Euler solution I wrote ran in less than one second, this one took over 18 seconds to get to the answer. Obviously it’s my fault for using a purely brute force algorithm.

Anyway, boredom is a great motivator and I just rewrote the exact same algorithm in C, just to see how much faster it would be.

 ```1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ``` ```#include   int is_triplet(int a, int b, int c) {         return (((a < b) && (b < c)) && ((a * a + b * b) == (c * c))); }   int main(void) {         for (int a = 0; a < 1000; a++)                 for (int b = a + 1; b < 1000; b++)                         for (int c = b + 1; c < 1000; c++)                                 if ((a + b + c == 1000) && is_triplet(a, b, c)) {                                         printf("%d %d %d = %d\n", a, b, c,                                                a * b * c);                                         return 0;                                 } }```

It’s the exact same algorithm, but instead of 18 seconds, it ran in 0.072s.

Update: And here’s the version suggested by Gustavo Niemeyer:

 ```1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ``` ```#include   int is_triplet(int a, int b, int c) {         return ((a * a + b * b) == (c * c)); }   int main(void) {         for (int a = 1; a < 1000; a++)                 for (int b = a + 1; b < (1000 - a) / 2; b++) {                         int c = 1000 - a - b;                         if (is_triplet(a, b, c)) {                                 printf("%d %d %d = %d\n", a, b, c,                                        a * b * c);                                 return 0;                         }                 } }```

It now runs in 0.002s

Syndicated 2010-08-04 00:43:42 from Roberto Teixeira's blog