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;