+2025-07-19 Bruno Haible <bruno@clisp.org>
+
+ next-prime: Tweaks for GNU gettext.
+ * lib/next-prime.c (is_prime): Change so that is_prime (3) returns true.
+ * tests/test-next-prime.c (main): Allow next_prime (1) to be 1.
+
2025-07-18 Collin Funk <collin.funk1@gmail.com>
doc: Mention GNU/Hurd is missing sync_file_range.
#include <stdint.h> /* for SIZE_MAX */
-/* Return true if CANDIDATE is a prime number. CANDIDATE should be an odd
- number at least equal to 11. */
+/* Return true if CANDIDATE is a prime number or 1.
+ CANDIDATE should be an odd number >= 1. */
static bool _GL_ATTRIBUTE_CONST
is_prime (size_t candidate)
{
size_t divisor = 3;
size_t square = divisor * divisor;
- while (square < candidate && (candidate % divisor))
+ for (;;)
{
+ if (square > candidate)
+ return true;
+ if ((candidate % divisor) == 0)
+ return false;
+ /* Increment divisor by 2. */
divisor++;
square += 4 * divisor;
divisor++;
}
-
- return (candidate % divisor ? true : false);
}
size_t _GL_ATTRIBUTE_CONST
int
main ()
{
- ASSERT (next_prime (1) >= 3 && next_prime (1) <= 11);
+ ASSERT (next_prime (1) >= 1 && next_prime (1) <= 11);
ASSERT (next_prime (3) >= 3 && next_prime (3) <= 11);
+ ASSERT (next_prime (5) >= 5 && next_prime (5) <= 11);
ASSERT (next_prime (7) >= 7 && next_prime (7) <= 11);
ASSERT (next_prime (10) == 11);
ASSERT (next_prime (11) == 11);