# Category : Assembly Language Source Code

Archive : LMPRIME1.ZIP

Filename : LMPRIME1.DOC

This program is a further outgrowth of the Spring, 1991 contest by Howard

Mencher on the Programmer's Corner (Gary Smith's BBS) in Washington, D.C.

(Columbia, MD) and is based heavily on Bill Parke's response contained in

PRIMES14. For completeness, this file includes PRIMES14.ZIP.

PRIMES14 allowed prime numbers to be generated for any range of numbers

between 1 and 1,048,575, and was written in assembly language for the 8088

cpu. LMPRIME1 goes a step further and extends the range to 4,294,967,295 but

takes advantage of, and requires, an 80386 processor. The size of the

program is larger than Bill's PRIMES14, but is still small enough

to be contained within 1 cluster (2048 bytes) on most hard disks.

The number of primes less than a given number, x, may be estimated by the

following formula attributed to the 19th century German mathematician,

Georg Riemann:

ôx

P(x) = [Li (x)] - .5 x Li (ûx), where Li(x) = ³ dt / ln t

õ2

The accuracy of this formula may be judged by the following table:

Actual Number

x of Primes less Li (x) P(x)

than x

100 25 29 27

1,000 168 177 170

10,000 1,229 1,245 1,231

100,000 9,592 9,629 9,594

1,000,000 78,498 78,627 78,538

10,000,000 664,579 664,917 664,686

100,000,000 5,761,455 5,762,208 5,761,586

1,000,000,000 50,847,568 50,849,234 50,847,517

The syntax for running LMPRIME1 is

LMPRIME1 n1 n2 [/] [/?]

where n1 and n2 are decimal digits (no comma delimiters) with

0 < n1 < n2 < 4,294,967,295

The program will give a listing of all primes between n1 and n2 and

a count of the number of such primes.

The optional / will suppress listing individual primes, supplying only

the count of the number of primes.

The program is compatible with DOS 5, so that supplying only the argument

/? will produce a small help message. For those using the DOS help

facility and DOSHELP.HLP, the DOS command HELP LMPRIME1 will also produce

the help message (provided LMPRIME1 has been added to DOSHELP.HLP).

The number of primes contained on each line of output is dependent on the

size of the largest prime. For example, with an 80-column screen,

LMPRIME1 1 90 will produce 24 primes on one line, while

LMPRIME1 4000000000 4000000200 will require two lines to produce 8 primes.

The program can also be used with either a 40-column screen or a 132-column

screen.

If your system contains an 80x87 math coprocessor, LMPRIME1.COM contained

in this file does not make use of the math chip. However, the source code

contained in LMPRIME1.ASM can easily be modified to take advantage of the

80x87 by changing the definition of IS8087 from 0 to 1. There is no major

speedup in calculation time; however the resulting .COM file will be smaller.

Les Moskowitz

11/26/91