题目
本题的目标很简单,就是判断一个给定的正整数是否素数。
输入格式
输入在第一行给出一个正整数N
( ≤ 10 ) (≤ 10) (≤10),随后N
行,每行给出一个小于 2 3 1 2^ 31 231的需要判断的正整数。
输出格式:
对每个需要判断的正整数,如果它是素数,则在一行中输出Yes,否则输出No。
输入样例:
2
11
111
输出样例:
Yes
No
输入样例2:
22. 18
题解
def is_prime(n):if n <= 1:return Falseif n <= 3:return Trueif n % 2 == 0 or n % 3 == 0:return Falsei = 5while i * i <= n:if n % i == 0 or n % (i + 2) == 0:return Falsei += 6return 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__": 这一段代码允许你编写只有在脚本作为
主程序运行时才会执行的代码,而不会在脚本作为模块被导入时执行。
这有助于将设置执行环境的代码与提供可重用函数或类的代码分开。
"""