p0045_s0.c
problem 45 · 23 lines
/* Solution to Euler Problem 45: Triangular, Pentagonal, and Hexagonal. */
#include "runner.h"
#include <math.h>
/* Scan triangular numbers T(n) from a given index, keeping those whose inverse pentagonal and
triangular discriminants are perfect squares (root == 5 mod 6 and 3 mod 4); O(k) candidates. */
const char *solve(int argc, char *argv[]) {
static char _answer[32];
long long n = (argc >= 2) ? parse_int(argv[1]) : 285;
while (1) {
n++;
long long t = n * (n + 1) / 2;
double s1 = sqrt((double)(1 + 24 * t));
if (fmod(s1, 6.0) != 5.0) continue;
double s2 = sqrt((double)(1 + 8 * t));
if (fmod(s2, 4.0) != 3.0) continue;
{ snprintf(_answer, sizeof _answer, "%lld", (long long)(t)); return _answer; }
}
}