aboutsummaryrefslogtreecommitdiff
path: root/content/posts/2026-01-02-new-years-primality-testing-by-hand.md
blob: 2fd02752ddcffb35283f57701ad9aeaaba8a9ff2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
---
slug: new-years-primality-testing-by-hand
title: "New Year's Primality Testing by Hand"
date: "2026-01-02T09:37:22-05:00"
---

Happy New Year!

The number 2026 has two factors: 2 and 1013.  I wondered "is 1013
prime?" and, for fun, "can I solve this in my head?" (e.g. no calculator,
computer, or pen and paper).

If 1013 is *not* prime, then it is composite and must have at least one
odd prime factor ≤ ⌊√1013⌋.

(We know the factor -- if it exists -- is odd because factors of odd
composites are always odd, and we know it is prime because of the
[fundamental theorem of arithmetic][]).

So our approach will be to check odd primes from 3 to √1013 to see
if any divide 1013.

Unfortunately we don't know √1013.  Fortunately 1013 is close to
1024, and 1024 is even power of 2.  So let's use 1024 to approximate
√1013:

1. 1013 < 1024, so √1013 < √1024
2. &radic;1024 = &radic;(2{{<sup 10>}}) = 2{{<sup 5>}} = 32
3. Therefore &radic;1013 &lt; 32

So we need to test odd primes in the range \[3,31\] to see if any divide
1013.

Before that, though, we prune the list of potential factors with the
[divisibility rules][].  We remove:

- 3, because the sum of the digits of 1013 isn't divisible by 3:
  `1+1+3=5` and 3&#x2224;5
- 5, because the last digit of 1013 isn't 0 or 5.
- 7, because 5 times the last digit (3) plus the rest (101) is
   not a multiple of 7: `5*3+101=116, 5*6+11=41`, and 7&#x2224;41.
- ...and so on for [11][], [13][], [17][], [19][], [23][], and [29][].

(I didn't remember the [divisibility rules][] for the range \[11,29\],
so I checked if any of the primes divide 1013 instead).

31 is the only remaining potential factor after pruning.  To check it,
we can either use the [Euclidean algorithm][] to see if `gcd(31, 1013)
!= 1` or do some trial arithmetic.  I chose the latter:

1. 31 = (30 + 1)
2. (30 + 1) * 33 = 990 + 33 = 1023
3. The closest multiples of 31 are 992 and 1023, so 31&#x2224;1013.

1013 does not have any odd prime factors in the range \[3,&radic;1013\],
so it must be prime.

Let's check our work with [SymPy][]:

```python
>>> import sympy
>>> sympy.ntheory.primetest.isprime(1013)
True
```
&nbsp;

Success!

### Further Reading

- [Integer factorization][]
- [Primality test][]
- [Sieve of Eratosthenes][]

[fundamental theorem of arithmetic]: https://en.wikipedia.org/wiki/Fundamental_theorem_of_arithmetic
  "Fundamental Theorem of Arithmetic (Wikipedia)"
[divisibility rules]: https://en.wikipedia.org/wiki/Divisibility_rule
  "shorthand rules for determining if one number divides another (Wikipedia)"
[11]: https://en.wikipedia.org/wiki/Divisibility_rule#11
  "divisibility rules for 11 (Wikipedia)"
[13]: https://en.wikipedia.org/wiki/Divisibility_rule#13
  "divisibility rules for 13 (Wikipedia)"
[17]: https://en.wikipedia.org/wiki/Divisibility_rule#17
  "divisibility rules for 17 (Wikipedia)"
[19]: https://en.wikipedia.org/wiki/Divisibility_rule#19
  "divisibility rules for 19 (Wikipedia)"
[23]: https://en.wikipedia.org/wiki/Divisibility_rule#23
  "divisibility rules for 23 (Wikipedia)"
[29]: https://en.wikipedia.org/wiki/Divisibility_rule#29
  "divisibility rules for 29 (Wikipedia)"
[euclidean algorithm]: https://en.wikipedia.org/wiki/Euclidean_algorithm
  "Euclidean Algorithm (Wikipedia)"
[integer factorization]: https://en.wikipedia.org/wiki/Integer_factorization
  "Integer factorization (Wikipedia)"
[primality test]: https://en.wikipedia.org/wiki/Primality_test
  "Primality test (Wikipedia)"
[sieve of eratosthenes]: https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes
  "Sieve of Eratosthenes (Wikipedia)"
[sympy]: https://sympy.org/
  "Python library for symbolic mathematics."