[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Program to output a subset of the composite numbers

On Wed, 15 Aug 2018 05:34:06 -0700, tomusatov wrote:

> I am not terribly familiar with Python, but am currently authoring an
> integer sequence for www.oeis.org and was wondering if anyone in the
> community could help me with authoring a Python program that outputs,
> "Composite numbers that are one less than a composite number."

Do you have a function to test for primality? For now, I'll assume you do.

def is_prime(n):
    # Returns True if n is prime, False otherwise.
    # implementation left as an exercise

# 0 (and 1) are neither prime nor composite; skip them.
# 2 and 3 are prime; start at the first composite, 4
i = 4
for j in range(5, 1001):
    if not is_prime(j):
    i = j

The above will stop at 999. To go forever, use this instead:

from itertools import count
i = 4
for j in count(5):
    if not is_prime(j):
    i = j

Alternatively, if you have a function which efficiently returns primes 
one at a time, you can do this:

n = 4  # start at the first composite
for p in primes(5):  # primes starting at 5
    print(list(range(n, p-1))
    n = p + 1

This ought to print out lists of composites, starting with:

[8, 9]
[14, 15]

etc. Take care though: I have not tested this code.

Steven D'Aprano
"Ever since I learned about confirmation bias, I've been seeing
it everywhere." -- Jon Ronson