📜  打印所有小于或等于N的半素数(1)

📅  最后修改于: 2023-12-03 15:10:02.173000             🧑  作者: Mango

打印所有小于或等于N的半素数

半素数是指正好有两个不同素数因子的正整数。例如,6是半素数,因为它的因子是2和3,这两个因子都是素数。

下面是一个Python函数,用于打印所有小于或等于给定数N的半素数。

def print_semiprimes(N):
    primes = []  # 存储所有素数
    semiprimes = []  # 存储所有半素数
    for i in range(2, N+1):
        if is_prime(i):
            primes.append(i)
            # 在素数列表中找到两个因子不同的数
            for j in primes:
                if i*j <= N:
                    semiprimes.append(i*j)
                else:
                    break
    # 打印半素数列表
    semiprimes.sort()
    for semiprime in semiprimes:
        print(semiprime)


def is_prime(n):
    # 判断n是否为素数
    if n < 2:
        return False
    for i in range(2, int(n**0.5)+1):
        if n % i == 0:
            return False
    return True

我们首先定义两个列表,primes用于存储所有素数,semiprimes用于存储所有半素数。我们使用一个for循环遍历2到N之间的所有数字,如果这个数字是素数,我们就把它添加到素数列表中。

然后我们在素数列表中找到所有两个因子不同的数,这些数的积即为半素数。我们将这些半素数添加到我们的半素数列表中。

在找到所有的半素数后,我们简单地将结果按升序打印出来。

我们还定义了一个名为is_prime的辅助函数,该函数用于检查给定的数字是否为素数。

这个函数的时间复杂度是O(N^2),因为我们在for循环中使用了两个嵌套循环。我们可以优化算法以达到更好的时间复杂度。