每日一题——Python实现PAT乙级1007 素数对猜想(举一反三+思想解读+逐步优化)


一个认为一切根源都是“自己不够强”的INTJ

个人主页:用哲学编程-CSDN博客
专栏:每日一题——举一反三
Python编程学习
Python内置函数

Python-3.12.0文档解读

题目链接

目录

我的写法

代码点评

代码分析

时间复杂度分析

空间复杂度分析

优化建议

我要更强!

代码解释

时间复杂度和空间复杂度分析

哲学和编程思想

举一反三

1. 效率优化

2. 预计算和缓存

3. 算法设计

4. 数学思维


我的写法

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) 来判断一个数是否为质数,并使用这个函数来检查每对连续的奇数。

代码分析

  1. 输入处理:
    • 使用 input() 函数获取用户输入,并将其转换为整数。
  2. 质数判断函数 is_prime(n):
    • 如果 n 小于等于 1,返回 0(非质数)。
    • 如果 n 小于等于 3,返回 1(质数)。
    • 如果 n 能被 2 或 3 整除,返回 0(非质数)。
    • 使用一个循环从 5 开始,检查 n 是否能被 i 或 i + 2 整除,直到 i * i 大于 n。如果找到任何因子,返回 0;否则,返回 1。
  3. 主逻辑:
    • 初始化输出计数器 output 为 0。
    • 使用一个循环从 3 开始,每次增加 2(因为只需要检查奇数),直到 N。
    • 在循环中,检查当前奇数和下一个奇数是否都是质数,如果是,则增加计数器。
  4. 输出结果:
  • 循环结束后,打印输出计数器的值。

时间复杂度分析

  • 质数判断函数 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)。

优化建议

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

用哲学编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值