# Context: A semiprime is a product of two prime
# numbers, not necessarily distinct.
# Squares of prime numbers are also semiprimes.

# Problem: Find the numbers which are semiprimes,
# within a given range. For e.g. 1 to 100.


def isSemiprime(num):
    # start with the smallest prime
    prime = 2
    # initialize counter to 0
    count = 0
    # Design of while loop:
    # 1. if count exceeds 2, it is not a semiprime, e.g. 30 = 2*3*5
    # 2. when the number becomes 1, we have found the second prime
    while count < 3 and num != 1:
        # if the number is divisible by current prime,
        # increment count, else move to new prime
        if not (num % prime):
            num = num / prime
            count = count + 1
        else:
            prime = prime + 1
    # if count is two, given number is a semiprime
    return count == 2


for i in range(1, 100):
    if isSemiprime(i):
        print(i, end=" ")

# Result: 4 6 9 10 14 15 21 22 25 26 33 34 35 38 39 46 49
# 51 55 57 58 62 65 69 74 77 82 85 86 87 91 93 94 95