1 条题解

  • 0
    @ 2025-2-14 19:57:29

    Python :

    # coding=utf-8
    def matrix_mult(A, B, mod):
        # 矩阵乘法,并对结果取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 matrix_pow(matrix, n, mod):
        # 矩阵快速幂
        result = [[1, 0], [0, 1]]  # 初始化为单位矩阵
        base = matrix
        
        while n > 0:
            if n % 2 == 1:
                result = matrix_mult(result, base, mod)
            base = matrix_mult(base, base, mod)
            n //= 2
        
        return result
    
    def pell_number(k, mod):
        if k == 1:
            return 1
        elif k == 2:
            return 2
        
        # 初始化矩阵和向量
        matrix = [[2, 1], [1, 0]]
        vector = [2, 1]
        
        # 计算矩阵的k-2次幂
        result_matrix = matrix_pow(matrix, k - 2, mod)
        
        # 计算最终结果
        a_k = (result_matrix[0][0] * vector[0] + result_matrix[0][1] * vector[1]) % mod
        
        return a_k
    
    # 读取输入
    n = int(input())
    k_values = [int(input()) for _ in range(n)]
    
    # 计算并输出结果
    results = [pell_number(k, 32767) for k in k_values]
    for result in results:
        print(result)
    
    • 1

    信息

    ID
    190
    时间
    1000ms
    内存
    256MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者