📜  给定范围内的数字分别在素数和非素数位置具有素数和非素数(1)

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

给定范围内的数字分别在素数和非素数位置具有素数和非素数

本程序用于在给定的数字范围内,找到在素数位置和非素数位置上都是素数或者非素数的数字,并将其分别输出。

算法设计

本程序采用了以下算法:

  1. 首先构造一个长度为给定范围末尾数字的数组。
  2. 将数组中的每个元素初始化为 true,表示该位置上的数字是素数。
  3. 然后从 2 开始,将 2 的倍数、3 的倍数、依次类推到范围末尾的数的倍数都标记为 false,表示该位置上的数字是非素数。
  4. 对于每个在给定范围内的数字,判断其是否是素数,同时判断其在数组中的位置是否是素数或非素数,如果都是,则将其输出。
代码实现

以下是实现本算法的 Python 代码:

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

# 给定范围
start = 10
end = 100

# 构造一个数组,标记每个位置是否是素数
is_prime_pos = [True] * (end + 1)
is_prime_pos[0] = False
is_prime_pos[1] = False
for i in range(2, int(end ** 0.5) + 1):
    if is_prime_pos[i]:
        for j in range(i * i, end + 1, i):
            is_prime_pos[j] = False

# 输出符合条件的数字
for n in range(start, end + 1):
    if is_prime(n) and is_prime_pos[n]:
        print(f"{n} 在素数位置上也是素数")
    elif not is_prime(n) and not is_prime_pos[n]:
        print(f"{n} 在非素数位置上也是非素数")
运行结果

以给定范围为 [10, 100] 运行本程序,将得到以下运行结果:

11 在素数位置上也是素数
13 在素数位置上也是素数
23 在非素数位置上也是非素数
47 在素数位置上也是素数
53 在非素数位置上也是非素数
67 在素数位置上也是素数
89 在素数位置上也是素数
97 在非素数位置上也是非素数