From agent-almanac
Analyzes prime numbers using primality tests (trial division, Miller-Rabin), factorization (Pollard's rho), Sieve of Eratosthenes, and Prime Number Theorem. Use for primality checks, factorizations, prime lists/counts up to bounds.
npx claudepluginhub pjt222/agent-almanacThis skill uses the workspace's default tool permissions.
---
Provides patterns for math/combinatorics problems: modular arithmetic, prime sieves, GCD/LCM, binomial coefficients, fast exponentiation, counting techniques, inclusion-exclusion, game theory. For number theory/combinatorics.
Solves modular arithmetic problems: linear congruences, Chinese Remainder Theorem systems, modular inverses, large exponentiations via Euler's theorem. For number theory computations.
Solves IMO, Putnam, USAMO, AIME problems with adversarial verification detecting self-check errors. Uses pure reasoning, calibrated confidence, PDF output if verified.
Share bugs, ideas, or general feedback.
Analyze prime numbers by selecting and applying the appropriate algorithm for the task at hand: primality testing, integer factorization, or prime distribution analysis. Verify results computationally and relate findings to the Prime Number Theorem.
Classify the request into one of three categories and select the appropriate algorithmic path.
Record the task type and the input value(s).
Expected: A clear classification with the input values recorded.
On failure: If the input is ambiguous (e.g., "analyze 60"), ask the user to clarify whether they want a primality test, factorization, or distribution analysis. Default to factorization for composite numbers and primality confirmation for suspected primes.
Test whether n is prime using an algorithm matched to the size of n.
Handle trivial cases: n < 2 is not prime. n = 2 or n = 3 is prime. If n is even and n > 2, it is composite.
Small n (n < 10^6): Use trial division.
Large n (n >= 10^6): Use Miller-Rabin probabilistic test.
Record the verdict: prime or composite, with the witness or certificate.
Small primes reference (first 25):
| Index | Prime | Index | Prime | Index | Prime |
|---|---|---|---|---|---|
| 1 | 2 | 10 | 29 | 19 | 67 |
| 2 | 3 | 11 | 31 | 20 | 71 |
| 3 | 5 | 12 | 37 | 21 | 73 |
| 4 | 7 | 13 | 41 | 22 | 79 |
| 5 | 11 | 14 | 43 | 23 | 83 |
| 6 | 13 | 15 | 47 | 24 | 89 |
| 7 | 17 | 16 | 53 | 25 | 97 |
| 8 | 19 | 17 | 59 | ||
| 9 | 23 | 18 | 61 |
Expected: A definitive answer (prime or composite) with the algorithm used and any witnesses or divisors found.
On failure: If Miller-Rabin reports "probably prime" but certainty is required, escalate to a deterministic test (e.g., AKS or ECPP). For trial division, if computation is too slow, switch to Miller-Rabin.
Factor n completely into its prime power decomposition.
Extract small factors by trial division:
If cofactor > 1 and cofactor < 10^12: Continue trial division up to sqrt(cofactor).
If cofactor > 1 and cofactor >= 10^12: Apply Pollard's rho algorithm.
Verify: Multiply all found prime factors (with exponents) and confirm the product equals the original n. Test each factor for primality.
Present the result in standard form: n = p1^a1 * p2^a2 * ... * pk^ak with p1 < p2 < ... < pk.
Algorithm complexity notes:
| Algorithm | Complexity | Best for |
|---|---|---|
| Trial division | O(sqrt(n)) | n < 10^12 |
| Pollard's rho | O(n^{1/4}) expected | n up to ~10^18 |
| Quadratic sieve | L(n)^{1+o(1)} | n up to ~10^50 |
| GNFS | L(n)^{(64/9)^{1/3}+o(1)} | n > 10^50 |
Expected: A complete prime factorization in canonical form, verified by multiplication.
On failure: If Pollard's rho fails to find a factor after many iterations (cycle detected without a non-trivial gcd), try different values of c (at least 5 attempts). If all fail, the cofactor may be prime -- confirm with a primality test.
Analyze the distribution of primes up to a given bound N.
Generate primes using the Sieve of Eratosthenes:
Count primes: Compute pi(N) = number of primes up to N.
Compare with the Prime Number Theorem:
Analyze prime gaps (optional):
Present findings in a summary table:
Bound N: 1,000,000
pi(N): 78,498
N/ln(N): 72,382
Li(N): 78,628
Relative error (N/ln(N)): 7.79%
Relative error (Li(N)): 0.17%
Max prime gap: 148 (between 492113 and 492227)
Twin primes: 8,169 pairs
Expected: A count of primes with PNT comparison and optional gap analysis.
On failure: If N is too large for in-memory sieving (N > 10^9), use a segmented sieve that processes the range in blocks. If only a count is needed (not a list), use the Meissel-Lehmer algorithm for pi(N) directly.
Cross-check all results using an independent computation method.
For primality: If trial division was used, verify with a quick Miller-Rabin pass (or vice versa). For known primes, check against published prime tables or OEIS sequences.
For factorization: Multiply all factors and confirm equality with the original input. Independently test each claimed prime factor for primality.
For distribution: Spot-check by testing 3-5 individual numbers from the sieve output for primality. Compare pi(N) against published values for standard benchmarks (pi(10^k) for k = 1, ..., 9).
Published values of pi(N):
| N | pi(N) |
|---|---|
| 10 | 4 |
| 100 | 25 |
| 1,000 | 168 |
| 10,000 | 1,229 |
| 100,000 | 9,592 |
| 10^6 | 78,498 |
| 10^7 | 664,579 |
| 10^8 | 5,761,455 |
| 10^9 | 50,847,534 |
Expected: All results independently verified with no discrepancies.
On failure: If verification reveals a discrepancy, re-run the original computation with extra checks enabled (e.g., verbose trial division logging). The most common errors are off-by-one in sieve bounds, integer overflow in modular arithmetic, and mistaking a pseudoprime for a prime.
Forgetting n = 1 is not prime: By convention, 1 is neither prime nor composite. Many algorithms silently misclassify it.
Integer overflow in modular exponentiation: When computing a^d mod n for Miller-Rabin, naive exponentiation overflows. Use modular exponentiation (repeated squaring with mod at each step).
Sieve off-by-one errors: The sieve must mark composites starting from p^2, not from 2p. Starting from 2p wastes time but is correct; starting from p+1 is wrong.
Pollard's rho cycle with d = n: If gcd(|x - y|, n) = n, the algorithm has found the trivial factor. Retry with a different polynomial constant c, not just a different starting point.
Carmichael numbers fooling Fermat's test: Numbers like 561 = 3 * 11 * 17 pass Fermat's primality test for all coprime bases. Always use Miller-Rabin, not plain Fermat.
Confusing pi(n) with the constant pi: The prime counting function pi(n) and the circle constant 3.14159... share notation. Context must be unambiguous.
solve-modular-arithmetic -- Modular arithmetic underpins Miller-Rabin and many factorization methodsexplore-diophantine-equations -- Prime factorization is a prerequisite for solving many Diophantine equationsformulate-quantum-problem -- Shor's algorithm for integer factorization connects primes to quantum computing