Skip to content

Commit 52402ab

Browse files
committed
A prime sieve
1 parent 7c2211c commit 52402ab

16 files changed

+1121
-83
lines changed

bn_mp_next_small_prime.c

+35
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
#include "tommath_private.h"
2+
#ifdef BN_MP_NEXT_SMALL_PRIME_C
3+
/* LibTomMath, multiple-precision integer library -- Tom St Denis */
4+
/* SPDX-License-Identifier: Unlicense */
5+
6+
/*
7+
* Mimics behaviour of Pari/GP's nextprime(n)
8+
* If n is prime set *result to n else set *result to first prime > n
9+
* and 0 in case of error
10+
*/
11+
mp_err mp_next_small_prime(mp_sieve_prime n, mp_sieve_prime *result, mp_sieve *sieve)
12+
{
13+
mp_sieve_prime ret = 0;
14+
int e = MP_OKAY;
15+
16+
if (n < 2) {
17+
*result = 2;
18+
return e;
19+
}
20+
21+
for (; ret == 0 && n != 0; n++) {
22+
if (n > MP_SIEVE_BIGGEST_PRIME) {
23+
return MP_SIEVE_MAX_REACHED;
24+
}
25+
/* just call mp_is_small_prime(), it does all of the heavy work */
26+
if ((e = mp_is_small_prime(n, &ret, sieve)) != MP_OKAY) {
27+
*result = 0;
28+
return e;
29+
}
30+
}
31+
*result = n - 1;
32+
return e;
33+
}
34+
#endif
35+

bn_mp_prec_small_prime.c

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
#include "tommath_private.h"
2+
#ifdef BN_MP_PREC_SMALL_PRIME_C
3+
/* LibTomMath, multiple-precision integer library -- Tom St Denis */
4+
/* SPDX-License-Identifier: Unlicense */
5+
6+
/*
7+
* Mimics behaviour of Pari/GP's precprime(n)
8+
* If n is prime set *result to n else set *result to first prime < n
9+
* and 0 in case of error
10+
*/
11+
mp_err mp_prec_small_prime(mp_sieve_prime n, mp_sieve_prime *result, mp_sieve *sieve)
12+
{
13+
mp_sieve_prime ret = 0;
14+
int e = MP_OKAY;
15+
16+
if (n == 2) {
17+
*result = 2;
18+
return e;
19+
}
20+
21+
if (n < 2) {
22+
*result = 0;
23+
return e;
24+
}
25+
26+
for (; ret == 0; n--) {
27+
if ((e = mp_is_small_prime(n, &ret, sieve)) != MP_OKAY) {
28+
*result = 0;
29+
return e;
30+
}
31+
}
32+
*result = n + 1;
33+
34+
return e;
35+
}
36+
#endif
37+

0 commit comments

Comments
 (0)