executable prime
A number can be represented as a string of bits, and so can a program. A prime number that represents an executable program (on some reasonable operating system) is an executable prime!
The most common processor with one byte instructions is the x86 line and on these the least positive executable number is 195. The is the value of the one-byte program RET
(return). If this one byte is stored as a .com
file, then it could be executed on a DOS machine (or a Windows machine in a DOS window).
According to Phil Carmody (see his well written link below), the three smallest executable primes on current hardware are the two byte programs:
- 38*256+195 which is
ES:RET
(segment override).- 46*256+195 which is
CS:RET
(segment override).- 47*256+195 which is
DAS; RET
(decimal adjust for subtract, then exit).
(These should execute fine on any x86 system.)
If we do not require that the prime run on a current system, then Phil suggests the least executable prime
is 199 (RST 0
). This instruction would
perform a warm reset on a 8080 or Z80 machine running CP/M (both of which were common in 1980). Like the DOS .com files, CP/M executables required no headers, so this single
byte is the whole program.
What about a non-trivial prime? The first one ever found was a program that is apparently functionally equivalent to Charles Hannum's tiny C version of deCSS. Phil Carmody altered the code slightly to make the compiled version shorter, and created an 1811-digit prime. See the first Prime Curios! link below.
See Also: Illegal
Related pages (outside of this work)
- An Executable Prime Number? Phil Carmody's
- The first non-trivial executable prime The Prime Glossary's
- The smallest executable prime The Prime Curios'