Skip to content

Commit 9238a17

Browse files
authored
Code cleanup and minor optimizations
Cleaned up compute_sqrt.c and done some minor optimizations.
1 parent de9a305 commit 9238a17

1 file changed

Lines changed: 18 additions & 19 deletions

File tree

src/compute_sqrt.c

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -6,38 +6,37 @@
66

77
void build_sqrt(mpz_t n,unsigned long dim, bool vector[dim], dyn_array_classic primes, mpz_t x, mpz_t y, dyn_array relations, dyn_array smooth)
88
{
9-
mpz_t tmp,tmp2;
10-
mpz_init(tmp);
11-
mpz_init(tmp2);
9+
mpz_t tmp_mpz, tmp_mpz_2;
10+
mpz_inits(tmp_mpz, tmp_mpz_2, NULL);
11+
1212
mpz_set_ui(y, 1);
1313
mpz_set_ui(x, 1);
14-
unsigned long vector_y[primes.len];
14+
unsigned long *vector_y = calloc(primes.len, sizeof(unsigned long));
15+
1516
for (size_t i = 0 ; i < primes.len ; i++) vector_y[i] = 0;
17+
1618
for (size_t e = 0 ; e < dim ; e++)
1719
{
1820
if (vector[e])
1921
{
20-
mpz_mul(x, x, *(smooth.start+e));
21-
mpz_mod(x, x, n);
22+
mpz_mul(tmp_mpz, x, smooth.start[e]);
23+
mpz_mod(x, tmp_mpz, n);
24+
2225
for (size_t i = 0 ; i < primes.len ; i++)
2326
{
24-
mpz_set_ui(tmp, *(primes.start+i));
25-
while(mpz_divisible_p(*(relations.start+e), tmp))
26-
{
27-
vector_y[i]++;
28-
mpz_mul_ui(tmp, tmp, *(primes.start+i));
29-
}
27+
mpz_set_ui(tmp_mpz, primes.start[i]);
28+
vector_y[i] += mpz_remove(tmp_mpz_2, relations.start[e], tmp_mpz);
3029
}
3130
}
3231
}
32+
3333
for (size_t k = 0 ; k < primes.len ; k++)
3434
{
35-
mpz_set_ui(tmp2, vector_y[k]);
36-
mpz_div_2exp(tmp2, tmp2, 1);
37-
mpz_set_ui(tmp, *(primes.start+k));
38-
mpz_powm(tmp, tmp, tmp2, n);
39-
mpz_mul(y, y, tmp);
40-
mpz_mod(y, y, n);
35+
mpz_set_ui(tmp_mpz, primes.start[k]);
36+
mpz_powm_ui(tmp_mpz, tmp_mpz, vector_y[k]>>1, n);
37+
mpz_mul(tmp_mpz_2, y, tmp_mpz);
38+
mpz_mod(y, tmp_mpz_2, n);
4139
}
42-
mpz_clears(tmp, tmp2, NULL);
40+
mpz_clears(tmp_mpz, tmp_mpz_2, NULL);
41+
free(vector_y);
4342
}

0 commit comments

Comments
 (0)