Made a small change to divide by the GCD. Has major time improvements.
This commit is contained in:
+6
-4
@@ -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 val1 = values[1] + values[2] + ((n1 + n2) >> 1);
|
||||||
int128_t val2 = 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;
|
int128_t greater = values[2] >= val1 ? values[2] : val1;
|
||||||
LIMIT = values[1] >= greater ? values[1] * greater / 2 : values[2] * val1 / 2;
|
int128_t gcd1 = gcd3(values[1], values[2], val1);
|
||||||
run_bfs(sum, values[1], values[2], val1, print_mode);
|
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) {
|
if (val2 >= 0) {
|
||||||
greater = values[2] >= val2 ? values[2] : val2;
|
greater = values[2] >= val2 ? values[2] : val2;
|
||||||
LIMIT = values[1] >= greater ? values[1] * greater / 2 : values[2] * val2 / 2;
|
LIMIT =values[1] >= greater ? values[1] * greater / (2 * gcd2 * gcd2) : values[2] * val2 / (2 * gcd2 * gcd2);
|
||||||
run_bfs(sum, values[1], values[2], val2, print_mode);
|
run_bfs(sum, values[1] / gcd2, values[2] / gcd2, val2 / gcd2, print_mode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
|||||||
Reference in New Issue
Block a user