2020年第十一届蓝桥杯决赛Python组(真题+解析+代码):阶乘约数

1 真题


2 解析

难度系数:⭐⭐

考察题型:数论

涉及知识点:约数定理

思路分析:

一开始我是想着直接分解因数,结果100!的时间复杂度实在太大。

所以这道题只能靠巧取解决。搬出适合本题的工具↓

质数-唯一分解公式

质数有2、3、5、7、11、13······

比如18=2*3*3(p1=2,a1=1;p2=3,a2=2)

约数个数=(a1+1)(a2+1)=(1+1)(2+1)=6  (分别是:1,2,3,6,9,18)


3 代码

#1.创建1~100的质数集
def prime(x):
    for i in range(2,int(x**0.5)+1):
        if x%i==0:
            return False
    return True
zhishu=[i for i in range(2,101) if prime(i)==True]
#zhishu=[
### 蓝桥杯 Python 常见重点题型及解题思路 #### 一、填空题 蓝桥杯 Python 的填空题通常涉及基础算法和逻辑推理。这类题目主要考察选手对基本概念的理解以及快速计算能力。 - **数学运算**:常见的有数列求和、阶乘计算等问题,可能需要利用合数学的知识来解决[^1]。 - **字符串处理**:涉及到字符替换、子串查找等内容,需熟练掌握 `str` 类的相关方法[^2]。 ```python def factorial(n): result = 1 for i in range(1, n + 1): result *= i return result ``` #### 二、编程题 编程题占据较大比重,其形式多样且难度不一。以下是几类典型的编程题及其对应的解法: ##### 1. 数学问题 此类题目往往基于特定的数学理论设计而成,比如质因数分解或者最大公约数最小公倍数等操作。对于这些情况,可以运用欧几里得算法等相关技术实现高效解答[^3]。 ```python from math import gcd def lcm(a, b): return abs(a * b) // gcd(a, b) ``` ##### 2. 数据结构应用 栈、队列、链表等数据结构的应用广泛存在于试题之中。熟悉它们的操作模式有助于更便捷地解决问题。 ```python class Stack: def __init__(self): self.items = [] def push(self, item): self.items.append(item) def pop(self): return self.items.pop() if not self.isEmpty() else None def isEmpty(self): return len(self.items)==0 ``` ##### 3. 动态规划与递归 动态规划适用于那些具有重叠子问题特性的场景;而某些复杂关系则可通过递归来简化表达。两者都需要清晰定义状态转移方程或函数调用流程图以便于分析执行路径。 ```python # Fibonacci sequence using memoization technique (dynamic programming approach) memo = {0: 0, 1: 1} def fibonacci(n): if n not in memo: memo[n] = fibonacci(n - 1) + fibonacci(n - 2) return memo[n] ``` #### 备考建议 为了更好地应对上述各类挑战,在日常学习期间应注重以下几个方面的积累: - 加强基础知识复习,特别是关于时间空间复杂度评估的部分; - 阅读并练习历真题集锦,从中总结规律寻找突破口; - 积极参与模拟测试活动,提高实战经验的同时检验薄弱环节所在之处。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小蓝刷题

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

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

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

打赏作者

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

抵扣说明:

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

余额充值