aboutsummaryrefslogtreecommitdiff
path: root/src/cm/custom.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cm/custom.c')
-rw-r--r--src/cm/custom.c24
1 files changed, 19 insertions, 5 deletions
diff --git a/src/cm/custom.c b/src/cm/custom.c
index 71d6625..4580942 100644
--- a/src/cm/custom.c
+++ b/src/cm/custom.c
@@ -11,6 +11,7 @@
static size_t custom_add_primes(GEN r, GEN order, GEN **primes,
size_t nprimes) {
+ debug_log("add_primes r %Pi, nprimes = %lu", r, nprimes);
size_t nalloc = nprimes;
if (nprimes == 0) {
nalloc = 10;
@@ -35,13 +36,17 @@ static size_t custom_add_primes(GEN r, GEN order, GEN **primes,
} else {
pstar = gcopy(pstar);
}
- (*primes)[nprimes++] = pstar;
if (nprimes == nalloc) {
nalloc *= 2;
*primes = try_realloc(*primes, sizeof(GEN) * nalloc);
}
+ (*primes)[nprimes++] = pstar;
+ debug_log("adding pstar %Pi", pstar);
}
}
+ debug_log("ret nprimes %lu, nalloc = %lu", nprimes, nalloc);
+
+ *primes = try_realloc(*primes, sizeof(GEN) * nprimes);
return nprimes;
}
@@ -55,7 +60,7 @@ static custom_quadr_t custom_quadr(GEN order) {
size_t nprimes = custom_add_primes(r, order, &Sp, 0);
GEN logN = ground(glog(order, BIGDEFAULTPREC));
- GEN rlog2 = sqri(mulii(r, logN));
+ GEN rlog2 = sqri(mulii(addis(r, 1), logN));
GEN i = gen_0;
@@ -74,11 +79,19 @@ static custom_quadr_t custom_quadr(GEN order) {
}
}
bits_free(&ibits);
- if (cmpii(pprod, rlog2) < 0 && equalii(modis(pprod, 8), stoi(5))) {
- // debug_log("candidate D = %Pi", pprod);
+
+ GEN absp = absi(pprod);
+ long m4 = mod4(absp);
+ if (cmpii(absp, rlog2) < 0 && equalii(modis(pprod, 8), stoi(5)) &&
+ m4 != 1 && m4 != 2) {
+ debug_log("candidate D = %Pi", pprod);
GEN x;
GEN y;
- cornacchia2(negi(pprod), order, &x, &y);
+ if (!cornacchia2(absp, order, &x, &y)) {
+ avma = btop;
+ i = addis(i, 1);
+ continue;
+ }
GEN pp1 = addii(addis(order, 1), x);
GEN pp2 = subii(addis(order, 1), x);
if (isprime(pp1)) {
@@ -108,6 +121,7 @@ static custom_quadr_t custom_quadr(GEN order) {
r = addis(r, 1);
nprimes = custom_add_primes(r, order, &Sp, nprimes);
+ rlog2 = sqri(mulii(addis(r, 1), logN));
}
}