From 9f1f152c4f3fccd5d7fdd1a63e21d4fb3ee5d025 Mon Sep 17 00:00:00 2001 From: Georgios Chatzopoulos Date: Wed, 6 May 2026 22:39:51 +0300 Subject: [PATCH] Made a small change to divide by the GCD. Has major time improvements. --- src/maths.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/maths.c b/src/maths.c index ade5918..9f48ebe 100755 --- a/src/maths.c +++ b/src/maths.c @@ -58,12 +58,14 @@ void generate_factor_pairs(int128_t* sum, int prime_index, int* exponents, int128_t val1 = values[1] + values[2] + ((n1 + n2) >> 1); int128_t val2 = values[1] + values[2] - ((n1 + n2) >> 1); int128_t greater = values[2] >= val1 ? values[2] : val1; - LIMIT = values[1] >= greater ? values[1] * greater / 2 : values[2] * val1 / 2; - run_bfs(sum, values[1], values[2], val1, print_mode); + int128_t gcd1 = gcd3(values[1], values[2], val1); + int128_t gcd2 = gcd3(values[1], values[2], val2); + LIMIT = values[1] >= greater ? values[1] * greater / (2 * gcd1 * gcd1) : values[2] * val1 / (2 * gcd1 * gcd1); + run_bfs(sum, values[1] / gcd1, values[2] / gcd1, val1 / gcd1, print_mode); if (val2 >= 0) { greater = values[2] >= val2 ? values[2] : val2; - LIMIT = values[1] >= greater ? values[1] * greater / 2 : values[2] * val2 / 2; - run_bfs(sum, values[1], values[2], val2, print_mode); + LIMIT =values[1] >= greater ? values[1] * greater / (2 * gcd2 * gcd2) : values[2] * val2 / (2 * gcd2 * gcd2); + run_bfs(sum, values[1] / gcd2, values[2] / gcd2, val2 / gcd2, print_mode); } } return;