You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解决Beecrowd提交代码时的IndexError: list index out of range问题

修复方案:解决IndexError列表索引越界问题

错误原因

报错IndexError: list index out of range出现在if (isPrime(vet[i])):这一行,说明**vet列表的长度小于你读取的N值**。本地测试时你输入的第二行刚好有N个数字,但平台的测试用例可能存在以下情况:

  • 第二行输入的数字数量不足N个
  • 输入的数字被拆分成了多行(比如部分数字在第三行及以后)

另外,当前代码中fact数组只预计算到了99!(因为range(1,100)生成1到99的数,fact的索引最大为99),如果输入的质数大于99,后续访问fact[vet[i]]也会触发同样的索引错误。

修改后的代码

import math
import sys

def isPrime(N):
    if N == 1:
        return False
    if N == 2:
        return True
    root = int(math.sqrt(N)) + 1
    for i in range(2, root):
        if N % i == 0:
            return False
    return True

# 预计算足够大的阶乘,可根据题目输入范围调整max_fact值
max_fact = 1000
fact = [1] * (max_fact + 1)
for i in range(1, max_fact + 1):
    fact[i] = fact[i-1] * i

# 一次性读取所有输入,避免单行输入限制
all_input = list(map(int, sys.stdin.read().split()))
N = all_input[0]
vet = all_input[1:N+1]

# 直接遍历vet元素,避免索引操作出错
for num in vet:
    if isPrime(num):
        print("{0}! = {1}".format(num, fact[num]))

关键修改点

  1. 统一读取输入:用sys.stdin.read()一次性读取所有输入内容,再拆分转换成整数列表。这样不管输入是单行还是多行,都能完整获取所有数字,确保vet的长度刚好为N。
  2. 扩展阶乘范围:将fact数组的预计算范围扩大到1000!(可根据题目实际输入上限调整),避免因输入质数过大导致的索引错误。
  3. 安全遍历列表:直接遍历vet中的元素,而非使用索引i访问,从根源上避免索引越界问题。

内容的提问来源于stack exchange,提问作者Frank

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 18:40:30