判断一个数是否为质数

🎉摘要:Python 是一门解释型、面向对象、动态类型的高级编程语言,由荷兰程序员 Guido van Rossum 于 1991 年发布,核心设计理念是优雅、明确、简单。

质数,也叫素数,是大于 1 的自然数中,除了 1 和它自身外,不能被其他自然数整除的数。

质数的基本定义如下:

  1. 质数必须满足:

    1. 大于 1 的自然数(2、3、5、7、11…)

    2. 正因数只有 1 和 它自己

  1. 与之相对的叫合数:大于 1,除了 1 和自身,还有其他因数。

  2. 1 既不是质数,也不是合数。

举例判断:

  • 5:只能被 1、5 整除 → 质数

  • 6:能被 1、2、3、6 整除 → 合数

  • 9:能被 1、3、9 整除 → 合数

方式一:简单实现

通过 for 循环判断指定的数能够被 2 ~ n-1 的数整除,如果可以,则不为质数。

示例代码:

def is_prime(num):
    # 小于2的数不是质数
    if num < 2:
        return False
    # 检查从 2 到 num-1 是否能整除
    for i in range(2, num):
        if num % i == 0:
            return False
    return True


# 测试
n = 29
if is_prime(n):
    print(f"{n} 是质数")
else:
    print(f"{n} 不是质数")

运行结果:

29 是质数

方式二:优化版(效率更高,推荐使用)

我们只需判断到 num 即可,不用遍历到 num-1,速度快很多。

示例代码:

import math

def is_prime(num):
    if num < 2:
        return False
    if num == 2:
        return True
    if num % 2 == 0:  # 偶数直接排除
        return False
    
    # 只检查奇数,且到平方根为止
    max_divisor = int(math.sqrt(num)) + 1
    for i in range(3, max_divisor, 2):
        if num % i == 0:
            return False
    return True


# 测试多个数字
test_nums = [1, 2, 3, 10, 17, 29, 97, 100]
for n in test_nums:
    print(f"{n:4d} → {'是质数' if is_prime(n) else '不是质数'}")

运行结果:

   1 → 不是质数
   2 → 是质数
   3 → 是质数
  10 → 不是质数
  17 → 是质数
  29 → 是质数
  97 → 是质数
 100 → 不是质数

方式三: 一行实现

下面通过极简的一行代码实现质数判断。

示例代码:

import math

# 定义质数判断函数(lambda 匿名函数)
# 判断逻辑:
# 1. n > 1:质数必须大于1
# 2. all(...):所有 2 ~ √n 之间的数都不能整除 n
# 3. range(2, int(math.sqrt(n)) + 1):遍历范围到 n 的平方根即可,提高效率
is_prime = lambda n: n > 1 and all(n % i != 0 for i in range(2, int(math.sqrt(n)) + 1))

# 调用函数判断 29 是否为质数
print(is_prime(29))  # True

运行结果:

True

   



说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
其他应用
公众号