p0009_s0.c

problem 9 · 22 lines

/* Solution to Euler Problem 9: Special Pythagorean Triplet. */
#include "runner.h"

const char *solve(int argc, char *argv[]) {
    /* Bounded two-variable search: the linear constraint fixes c = S - a - b, so only
       a (1..S/4) and b (a..S/2) are searched; return a*b*c on the first Pythagorean hit. O(S^2). */
    static char _answer[32];
    int sum_sides = parse_int(argv[1]);

    for (int a = 1; a < sum_sides / 4 + 1; a++) {
        for (int b = a; b < sum_sides / 2; b++) {
            int c = sum_sides - a - b;
            if (a * a + b * b == c * c) {
                { snprintf(_answer, sizeof _answer, "%lld", (long long)((long long)a * b * c)); return _answer; }
            }
        }
    }

    fprintf(stderr, "No Pythagorean triplet exists with sum %d\n", sum_sides);
    { snprintf(_answer, sizeof _answer, "%lld", (long long)(-1)); return _answer; }
}