
一个认为一切根源都是“自己不够强”的INTJ
个人主页:用哲学编程-CSDN博客
专栏:每日一题——举一反三
Python编程学习
Python内置函数
目录

我的写法
from math import*
N=int(input())
def is_prime(n):
if n <= 1:
return 0
if n <= 3:
return 1
if n % 2 == 0 or n % 3 == 0:
return 0
i = 5
while i * i <= n:
if n % i == 0 or n % (i + 2) == 0:
return 0
i += 6
return 1
output=0
for i in range(3,N+1-2,2):
if is_prime(i)+is_prime(i+2)==2:
output+=1
print(output)

代码点评
这段代码的主要功能是计算小于或等于给定整数 N 的范围内,有多少对连续的奇数都是质数。代码中定义了一个辅助函数 is_prime(n) 来判断一个数是否为质数,并使用这个函数来检查每对连续的奇数。
代码分析
- 输入处理:
- 使用 input() 函数获取用户输入,并将其转换为整数。
- 质数判断函数 is_prime(n):
- 如果 n 小于等于 1,返回 0(非质数)。
- 如果 n 小于等于 3,返回 1(质数)。
- 如果 n 能被 2 或 3 整除,返回 0(非质数)。
- 使用一个循环从 5 开始,检查 n 是否能被 i 或 i + 2 整除,直到 i * i 大于 n。如果找到任何因子,返回 0;否则,返回 1。
- 主逻辑:
- 初始化输出计数器 output 为 0。
- 使用一个循环从 3 开始,每次增加 2(因为只需要检查奇数),直到 N。
- 在循环中,检查当前奇数和下一个奇数是否都是质数,如果是,则增加计数器。
- 输出结果:
- 循环结束后,打印输出计数器的值。
时间复杂度分析
- 质数判断函数 is_prime(n):这个函数的时间复杂度是 O(sqrt(n)),因为最坏情况下,需要检查到 sqrt(n) 来确定 n 是否为质数。
- 主循环:循环从 3 到 N,每次增加 2,因此循环次数大约是 N/2。
- 总体时间复杂度:每次循环中调用两次 is_prime 函数,因此总体时间复杂度是 O(N * sqrt(N))。
空间复杂度分析
- 代码中没有使用额外的数据结构来存储大量数据,只使用了几个变量(N、output、循环变量 i),因此空间复杂度是 O(1)。

最低0.47元/天 解锁文章
1104

被折叠的 条评论
为什么被折叠?



