L1-028 判断素数(Python实现) 测试点全过

前言: {\color{Blue}前言:} 前言:本系列题使用的是“PTA中的团体程序设计天梯赛——练习集”的题库,难度有L1、L2、L3三个等级,分别对应团体程序设计天梯赛的三个难度,如有需要可以直接查看对应专栏。发布个人的刷题笔记的同时,也是希望可以帮助到有需要的人,我会尽量的解释每一步代码,如有错误或者可以优化的地方还望各位CSDN的朋友可以指出来。更新速度预计是每天不定时更新三道,若当天没有更新后期将会补上。

题目

本题的目标很简单,就是判断一个给定的正整数是否素数。

输入格式
输入在第一行给出一个正整数N ( ≤ 10 ) (≤ 10) 10,随后N行,每行给出一个小于 2 3 1 2^ 31 231的需要判断的正整数。

输出格式:
对每个需要判断的正整数,如果它是素数,则在一行中输出Yes,否则输出No。

输入样例:

2
11
111

输出样例:

Yes
No

题解

def is_prime(n):
    if n <= 1:
        return False
    if n <= 3:
        return True
    if n % 2 == 0 or n % 3 == 0:
        return False
    i = 5
    while i * i <= n:
        if n % i == 0 or n % (i + 2) == 0:
            return False
        i += 6
    return True
"""
1. n 小于等于 1 时,直接返回 False,因为素数定义为大于 1 的正整数。
2. n 等于 2 或 3 时,直接返回 True,因为它们都是素数。
3. n 能被 2 或 3 整除时,返回 False,因为它们不是素数。
4. i 从 5 开始,每次循环检查 i 和 i + 2 是否能整除 n,如果可以,返回 False。
这是因为除了 2 和 3,所有素数都可以表示为 6k ± 1 的形式。
(
为什么是 6k ± 1 呢?这可以从素数的奇偶性以及与 2 和 3 的关系来解释:

2 和 3 是最小的两个素数,它们分别是 6k 和 6k + 3,其中 k = 0。
所有大于 3 的偶数都不可能是素数,因为它们可以被 2 整除。因此,除了 2,其它的偶数都不需要考虑。

对于奇数来说,除了 3,其它的奇数要么与 6k + 1,要么与 6k + 5 的形式相符。
如果一个奇数可以写成 6k + 2 的形式,那么它能被 2 整除,不是素数。
如果一个奇数可以写成 6k + 3 的形式,那么它能被 3 整除,不是素数。
如果一个奇数可以写成 6k + 4 的形式,那么它能被 2 整除,不是素数。
剩下的奇数只能是 6k + 1 或 6k + 5 的形式。

因此,素数的分布规律在一定程度上可以归结为这个性质。这个性质在一些数学证明和算法设计中有应用,但并不是用来判定素数的最优方法。实际上,判定素数的最优方法仍然是一个有趣而复杂的问题,涉及到数论和计算复杂性理论。
)
5.循环中的条件 i * i <= n 是因为如果 n 有大于 i 的因子,那么这个因子必然有一个小于等于 sqrt(n) 的对应因子。因此,只需要检查到 sqrt(n) 为止。
6.这个函数接受一个正整数 n 作为输入,如果它是素数,返回 True,否则返回 False。
"""

def main():
    N = int(input())
    for _ in range(N):
        num = int(input())
        if is_prime(num):
            print("Yes")
        else:
            print("No")

if __name__ == "__main__":
    main()
"""
`if __name__ == "__main__": 这一段代码在Python中
用于判断一个脚本是作为主程序运行,还是作为模块被导入到其他脚本中。它的含义如下:

1.__name__ 是Python中的一个特殊内置变量,用于表示当前模块或脚本的名称。
2.当一个Python脚本直接运行时,__name__ 的值被设置为 "__main__"。
3.当一个Python脚本作为模块被导入到其他脚本中时,__name__ 的值被设置为模块的名称(即文件名去掉 .py 后缀)。

if __name__ == "__main__": 这一段代码允许你编写只有在脚本作为
主程序运行时才会执行的代码,而不会在脚本作为模块被导入时执行。
这有助于将设置执行环境的代码与提供可重用函数或类的代码分开。
"""

你可能感兴趣的:(python,算法,数据结构)