Elephant 在「斐波那契数列」的评测结果
这是该 AI 模型在此测试用例上的详细评测结果。
基本信息
- 模型名称:Elephant
- 用例名称:斐波那契数列
- 测试类型:文本生成
- 评测维度:代码生成
系统提示词(System Prompt)
这是给 AI 模型的背景设定和角色指令:
你是一名资深 Python 算法专家,擅长基础数据结构与算法的清晰实现与讲解。 回答要求: 1. 在给出代码前,用 1-3 句话简要说明你选择的实现思路(如循环迭代或递归)。 2. 代码需包含函数签名的类型注解(Type Hints)和简洁的 docstring。 3. 对边界情况(如 n=0、n=1、n 为负数)需在 docstring 或注释中说明处理方式。 4. 代码风格需符合 PEP 8 规范,变量命名清晰易读。 5. 给出至少 3 个调用示例(含边界值)验证函数正确性。
用户提示词(User Prompt)
这是用户给 AI 模型的具体任务要求:
请用 Python 实现一个斐波那契数列函数 `fib(n)`。 **数列定义:** - F(0) = 0 - F(1) = 1 - F(n) = F(n-1) + F(n-2),当 n ≥ 2 **函数要求:** - 函数签名:`def fib(n: int) -> int` - 输入 `n` 为非负整数(n ≥ 0),若 `n < 0` 则抛出 `ValueError` - 返回第 n 项斐波那契数的值 - 实现方式不限(循环迭代或递归均可),但需保证逻辑正确 **示例:**
评测结果
综合得分
该模型在此用例的得分为:86.7 分(满分 100 分),已通过
基础难度评测结果
- 得分:86.7 分
- 通过状态:已通过
模型生成产物
以下是该模型针对此任务的实际生成内容:
使用迭代法计算斐波那契数列,通过两个变量滚动更新避免递归开销,时间复杂度 O(n),空间复杂度 O(1)。 ```python def fib(n: int) -> int: """ 计算第 n 项斐波那契数。 数列定义:F(0)=0, F(1)=1, F(n)=F(n-1)+F(n-2) (n≥2) 若 n < 0,抛出 ValueError。 Args: n: 非负整数,表示斐波那契数列的项索引 Returns: 第 n 项斐波那契数值 Raises: ValueError: 当 n 为负数时抛出 """ if n < 0: raise ValueError("n 必须是非负整数") if n == 0: return 0 prev, curr = 0, 1 for _ in range(2, n + 1): prev, curr = curr, prev + curr return curr # 调用示例 if __name__ == "__main__": # 边界值:n = 0 print(f"fib(0) = {fib(0)}") # 输出: 0 # 常规值:n = 1 print(f"fib(1) = {fib(1)}") # 输出: 1 # 常规值:n = 10 print(f"fib(10) = {fib(10)}") # 输出: 55 # 异常值:n = -1 try: fib(-1) except ValueError as e: print(f"fib(-1) 抛出异常: {e}") # 输出: ValueError ```
AI 评审点评
以下是 AI 评审对该模型输出的点评:
【KIMI】整体而言,这是一个高质量的斐波那契数列函数实现。代码逻辑正确,风格规范,对异常情况进行了处理。主要扣分点在于对边界情况的说明不够详尽。
进阶难度评测结果
- 得分:86.7 分
- 通过状态:已通过
模型生成产物
以下是该模型针对此任务的实际生成内容:
### 算法思路说明 采用迭代法计算斐波那契数列,仅维护前两个状态 `a` 和 `b`,通过循环从底向上逐步推进至目标项。该方法时间复杂度为 O(n),空间复杂度为 O(1),避免了递归开销和额外数组存储。 ### 完整代码 ```python def fib(n: int) -> int: """ 计算斐波那契数列第 n 项的值。 数学定义: F(0) = 0 F(1) = 1 F(n) = F(n-1) + F(n-2),n ≥ 2 参数: n: 非负整数,表示要计算的斐波那契项索引。 返回: 第 n 项斐波那契数值(支持大整数)。 异常: ValueError: 若 n >> fib(0) 0 >>> fib(1) 1 >>> fib(10) 55 >>> fib(100) 354224848179261915075 """ if n = 0") if n == 0: return 0 if n == 1: return 1 a, b = 0, 1 for _ in range(2, n + 1): a, b = b, a + b return b ``` ### 关键测试用例验证 ```python # 基础用例 assert fib(0) == 0 assert fib(1) == 1 assert fib(2) == 1 assert fib(10) == 55 # 大数用例(n=100) assert fib(100) == 354224848179261915075 # 边界用例(n=1000) expected_1000 = 43466557686937456435688527675040625802564660517371780402481729089536555417949051890403879840079255169295922593080322634775209689623239873322471161642996440906533187938298969649928516003704476137795166849228875 assert fib(1000) == expected_1000 # 非法输入用例 try: fib(-1) raise AssertionError("Expected ValueError for n=-1") except ValueError as e: assert "n 必须是非负整数" in str(e) print("所有测试用例通过!") ```
AI 评审点评
以下是 AI 评审对该模型输出的点评:
【KIMI】整体而言,该实现满足了题目要求,功能正确,算法复杂度合规,代码质量良好。但在代码规范性和可读性方面还有改进空间。
困难难度评测结果
- 得分:86.2 分
- 通过状态:已通过
模型生成产物
以下是该模型针对此任务的实际生成内容:
矩阵快速幂的核心在于将递推关系转化为矩阵乘法形式,通过构造转移矩阵使其幂次对应状态转移;利用矩阵结合律将线性递推的复杂度从 O(n) 优化至 O(log n),每次幂运算通过二分法加速。这里转移矩阵基于斐波那契的递推结构设计,确保状态向量在乘法中正确推进。 ```python from typing import List MOD: int = 10**9 + 7 def matrix_multiply(a: List[List[int]], b: List[List[int]]) -> List[List[int]]: """ Multiply two 2x2 matrices under modulo MOD. Intermediate results are taken modulo MOD at each step to prevent integer overflow and ensure values remain within standard integer range, as required for large n. """ return [ [(a[0][0] * b[0][0] + a[0][1] * b[1][0]) % MOD, (a[0][0] * b[0][1] + a[0][1] * b[1][1]) % MOD], [(a[1][0] * b[0][0] + a[1][1] * b[1][0]) % MOD, (a[1][0] * b[0][1] + a[1][1] * b[1][1]) % MOD] ] def matrix_power(matrix: List[List[int]], power: int) -> List[List[int]]: """ Compute matrix^power using binary exponentiation (fast exponentiation). Time complexity involves O(log n) matrix multiplications due to halving the exponent each iteration. Each multiplication is O(1) for fixed-size 2x2 matrices. """ result: List[List[int]] = [[1, 0], [0, 1]] # Identity matrix base: List[List[int]] = matrix while power > 0: if power % 2 == 1: result = matrix_multiply(result, base) base = matrix_multiply(base, base) power //= 2 return result def fib_mod(n: int) -> int: """ Compute the nth Fibonacci number modulo 10^9+7 using matrix exponentiation. The transformation uses the matrix [[1,1],[1,0]]^n to derive F(n) from initial state [F(1), F(0)]. Intermediate multiplications apply modulo MOD to avoid overflow and maintain correctness for n up to 10^18. Raises: ValueError: If n < 0. """ if n < 0: raise ValueError("n must be a non-negative integer") if n == 0: return 0 if n == 1: return 1 base_matrix: List[List[int]] = [[1, 1], [1, 0]] result_matrix = matrix_power(base_matrix, n - 1) return result_matrix[0][0] # F(n) = result_matrix[0][0] * F(1) + result_matrix[0][1] * F(0) # Validation test cases if __name__ == "__main__": # Test case 1: n = 0 (boundary) assert fib_mod(0) == 0, "F(0) should be 0" # Test...
AI 评审点评
以下是 AI 评审对该模型输出的点评:
【KIMI】代码整体实现了题目要求的矩阵快速幂算法,时间复杂度和取模都符合要求。测试用例覆盖了边界值和大数情况,预期输出正确。代码结构清晰,但可读性还有提升空间。
相关链接
您可以通过以下链接查看更多相关内容: