kimi-k2.6 在「斐波那契数列」的评测结果

这是该 AI 模型在此测试用例上的详细评测结果。

基本信息

  • 模型名称:kimi-k2.6
  • 用例名称:斐波那契数列
  • 测试类型:文本生成
  • 评测维度:代码生成

系统提示词(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 项斐波那契数的值 - 实现方式不限(循环迭代或递归均可),但需保证逻辑正确 **示例:**

评测结果

综合得分

该模型在此用例的得分为:95.8 分(满分 100 分),已通过

基础难度评测结果

  • 得分:95.8 分
  • 通过状态:已通过

模型生成产物

以下是该模型针对此任务的实际生成内容:

我选择使用**循环迭代**的方式实现,时间复杂度为 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 >= 0)。 返回: 第 n 项斐波那契数的值。 异常: ValueError: 当 n 为负数时抛出。 边界情况处理: - n < 0: 抛出 ValueError。 - n = 0: 直接返回 0。 - n = 1: 直接返回 1。 """ if n < 0: raise ValueError("输入参数 n 必须为非负整数, got n = {}".format(n)) # 处理前两项的边界情况 if n == 0: return 0 if n == 1: return 1 # 从第 2 项开始迭代递推 prev: int = 0 # F(i-2) curr: int = 1 # F(i-1) for _ in range(2, n + 1): prev, curr = curr, prev + curr return curr # 调用示例(含边界值验证) if __name__ == "__main__": print(fib(0)) # 期望输出: 0 (边界:F(0)) print(fib(1)) # 期望输出: 1 (边界:F(1)) print(fib(10)) # 期望输出: 55 (常规项) print(fib(20)) # 期望输出: 6765(较大项验证迭代正确性) # 异常示例(取消注释可测试) # print(fib(-3)) # 期望抛出 ValueError ```

AI 评审点评

以下是 AI 评审对该模型输出的点评:

【CLAUDE】这是一个高质量的斐波那契数列实现。候选输出完全满足所有要求:思路说明简洁清晰、代码包含完整的类型注解和 docstring、边界情况处理周全、符合 PEP 8 规范、提供了充分的测试用例。迭代实现避免了递归的性能问题,时间复杂度 O(n)、空间复杂度 O(1) 表现优异。代码可读性强,文档完备,是一个接近完美的实现范例。 【GEMINI】这是一份教科书级的代码实现。模型完全遵循了所有的指令要求,不仅在算法逻辑上无懈可击,在代码规范、文档编写和异常处理方面也表现出了极高的专业水平。迭代法的选择也体现了对性能的考虑。 【KIMI】整体而言,这段代码实现了题目要求的斐波那契数列函数,逻辑正确,代码风格良好,边界和异常处理也比较到位。但在代码可读性和异常测试方面还有改进空间。

进阶难度评测结果

  • 得分:96.8 分
  • 通过状态:已通过

模型生成产物

以下是该模型针对此任务的实际生成内容:

**算法思路说明** 采用迭代递推法:维护两个变量分别保存 `F(k-2)` 和 `F(k-1)`,通过一次从 `2` 到 `n` 的循环依次累加得到 `F(n)`。该算法仅使用常数个额外变量,无需数组或列表缓存中间结果,因此**时间复杂度为 O(n),空间复杂度为 O(1)**。 --- **完整代码** ```python def fib(n: int) -> int: """ 计算第 n 个斐波那契数(Fibonacci Number)。 采用迭代递推方式,从 F(0) 和 F(1) 出发,依次累加至 F(n)。 仅使用常数个额外变量,不借助列表或数组缓存中间结果, 天然支持 Python 原生大整数运算。 Args: n: 斐波那契数列的索引,必须为非负整数(n >= 0)。 Returns: int: 第 n 个斐波那契数。当 n 较大时,返回 Python 原生大整数。 Raises: ValueError: 若 n 为负数。 Examples: >>> fib(0) 0 >>> fib(1) 1 >>> fib(10) 55 >>> fib(100) 354224848179261915075 """ if n = 0。") if n == 0: return 0 prev: int = 0 curr: int = 1 for _ in range(2, n + 1): prev, curr = curr, prev + curr return curr ``` --- **关键测试用例验证** ```python if __name__ == "__main__": # 1. 基础边界与递推正确性 assert fib(0) == 0 assert fib(1) == 1 assert fib(2) == 1 assert fib(10) == 55 assert fib(20) == 6765 # 2. 大数计算(n=100 与 n=1000) assert fib(100) == 354224848179261915075 fib_1000 = fib(1000) assert len(str(fib_1000)) == 209 # 第 1000 项共有 209 位十进制数字 # 3. 非法输入健壮性 try: fib(-3) assert False, "应抛出 ValueError" except ValueError as e: assert "n 必须为非负整数" in str(e) print(f"✓ 异常捕获测试通过: {e}") print("✓ 所有关键测试用例通过。") ```

AI 评审点评

以下是 AI 评审对该模型输出的点评:

【CLAUDE】这是一个高质量的斐波那契实现,完全满足所有功能和非功能性要求。代码采用标准的迭代递推算法,复杂度最优,健壮性良好,文档完备,测试覆盖充分。算法思路说明简洁准确,代码结构清晰规范,测试用例设计合理(覆盖边界、大数和异常场景)。整体展现了扎实的算法功底和良好的工程实践。 【GEMINI】该回答完美符合所有指令要求。算法选择正确,复杂度达标,代码实现规范且健壮,文档和测试用例非常完整,展现了资深工程师的专业水准。 【KIMI】该实现基本满足题目要求,算法思路清晰,代码质量较高。在正确性、复杂度合规性和代码质量方面均表现良好。但代码健壮性还有提升空间,可以考虑增加对输入类型的检查。

困难难度评测结果

  • 得分:96.1 分
  • 通过状态:已通过

模型生成产物

以下是该模型针对此任务的实际生成内容:

矩阵快速幂将线性递推升维为矩阵的幂运算,通过二进制分解指数把原本 \(O(n)\) 的递推压缩至 \(O(\log n)\) 次矩阵乘法。对于斐波那契数列,构造转移矩阵 \(M=\begin{bmatrix}1&1\\1&0\end{bmatrix}\),它满足 \([F(n+1),F(n)]^{\mathsf{T}} = M\cdot[F(n),F(n-1)]^{\mathsf{T}}\),因此 \(M^n\) 的右上角元素恰为 \(F(n)\)。由于模运算对加法与乘法保持同态,在每次矩阵乘法的中间结果上即时取模,可将数值始终限制在 \([0, \text{MOD})\) 区间内,既避免大整数膨胀,又确保最终余数正确。 ```python from typing import Tuple MOD: int = 10**9 + 7 def _mat_mult( A: Tuple[Tuple[int, int], Tuple[int, int]], B: Tuple[Tuple[int, int], Tuple[int, int]], ) -> Tuple[Tuple[int, int], Tuple[int, int]]: """对两个 2×2 矩阵做乘法,并在每个中间结果上即时对 MOD 取模。 即时取模原因:斐波那契数列呈指数级增长,当 n 高达 10^18 时,未经取模的 中间结果将拥有数百万位十进制数字,即便 Python 支持大整数,其乘法复杂度 也会随位数增加而显著退化;此外,模运算具有 (a * b) % MOD = ((a % MOD) * (b % MOD)) % MOD 的同态性质,每一步取模 可确保数值始终被限制在 [0, MOD) 区间内,从而保证计算的正确性与高效性。 """ 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 _mat_pow( M: Tuple[Tuple[int, int], Tuple[int, int]], power: int ) -> Tuple[Tuple[int, int], Tuple[int, int]]: """计算 2×2 矩阵 M 的 power 次幂(快速幂),返回结果已取模。 时间复杂度:O(log power),因为指数的二进制表示最多有 log2(power)+1 位, 每一位对应常数次 2×2 矩阵乘法。 """ # 2×2 单位矩阵 result: Tuple[Tuple[int, int], Tuple[int, int]] = ((1, 0), (0, 1)) base: Tuple[Tuple[int, int], Tuple[int, int]] = M while power > 0: if power & 1: result = _mat_mult(result, base) base = _mat_mult(base, base) power >>= 1 return result def fib_mod(n: int) -> int: """计算第 n 项斐波那契数对 10^9+7 取模后的结果。 算法使用矩阵快速幂:定义转移矩阵 [[1,1],[1,0]],其 n 次幂的右上角元素 即为 F(n)。整个过程时间复杂度 O(log n),空间复杂度 O(1)。 Args: n: 非负整数,表示斐波那契数列的项数。支持范围 0 ≤ n ≤ 10^18。 Returns: int: F(n) mod (10^9+7)。 Raises: ValueError: 如果 n < 0。 """ if n < 0: raise ValueError(f"输入 n 必须为非负整数,但收到了 n={n}") # 转移矩阵 M = [[1, 1], [1, 0]] # M^n 的右上角元素为 F(n)。当 n=0 时,_mat_pow 返回单位矩阵,右上角为 0,恰为 F(0)。 M: Tuple[Tuple[int, int], Tuple[int, int]] = ((1, 1), (1, 0)) M_n = _mat_pow(M, n) return M_n[0][1] ``` ### 验证用例 | 调用 | 预期输出 | 说明 |...

AI 评审点评

以下是 AI 评审对该模型输出的点评:

【CLAUDE】该回答质量极高,完整满足题目所有要求:正确实现了矩阵快速幂算法,处理了所有边界情况(n=0、负数输入),支持n=10^18级别超大输入,每步矩阵乘法即时取模,代码结构清晰、注释详尽。前置说明准确描述了矩阵快速幂核心思路和转移矩阵构造原理。验证用例覆盖边界值和大数,时间复杂度分析明确。整体是一个接近满分的高质量实现。 【GEMINI】这是一份极高质量的回答。模型不仅完美遵循了所有约束条件(包括字数限制、代码规范、取模逻辑及复杂度分析),还展现了深厚的算法功底。代码编写严谨,文档说明详尽且专业,测试用例覆盖全面,是一个教科书级的矩阵快速幂实现。 【KIMI】整体而言,代码实现了题目要求的矩阵快速幂算法,正确性高,时间复杂度符合要求。代码质量良好,但有一些细节可以进一步优化。

相关链接

您可以通过以下链接查看更多相关内容:

加载中...