osdir.com


[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):
        print(i)
    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):
        print(i)
    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