結果
| 問題 | No.1050 Zero (Maximum) | 
| コンテスト | |
| ユーザー |  lam6er | 
| 提出日時 | 2025-03-20 18:49:05 | 
| 言語 | PyPy3 (7.3.15) | 
| 結果 | 
                                AC
                                 
                             | 
| 実行時間 | 107 ms / 2,000 ms | 
| コード長 | 1,667 bytes | 
| コンパイル時間 | 181 ms | 
| コンパイル使用メモリ | 82,772 KB | 
| 実行使用メモリ | 76,548 KB | 
| 最終ジャッジ日時 | 2025-03-20 18:50:30 | 
| 合計ジャッジ時間 | 2,178 ms | 
| ジャッジサーバーID (参考情報) | judge3 / judge4 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 3 | 
| other | AC * 15 | 
ソースコード
MOD = 10**9 + 7
import math
def main():
    M, K = map(int, input().split())
    # Create transition matrix
    # matrix_total = matrix1 + matrix2
    matrix_total = [[0]*M for _ in range(M)]
    # Compute matrix2
    matrix2 = [[0]*M for _ in range(M)]
    for a in range(M):
        for b in range(M):
            if a == 0:
                if b == 0:
                    matrix2[a][b] = M % MOD
                else:
                    matrix2[a][b] = 0
            else:
                d = math.gcd(a, M)
                if (b % d) != 0:
                    matrix2[a][b] = 0
                else:
                    matrix2[a][b] = d % MOD
    # Add matrix1 (all ones) to matrix2
    for a in range(M):
        for b in range(M):
            matrix_total[a][b] = (1 + matrix2[a][b]) % MOD
    # Matrix exponentiation functions
    def multiply(A, B):
        result = [[0]*M for _ in range(M)]
        for i in range(M):
            for k in range(M):
                a_ik = A[i][k]
                if a_ik == 0:
                    continue
                for j in range(M):
                    result[i][j] = (result[i][j] + a_ik * B[k][j]) % MOD
        return result
    def matrix_pow(mat, power):
        result = [[0]*M for _ in range(M)]
        for i in range(M):
            result[i][i] = 1
        while power > 0:
            if power % 2 == 1:
                result = multiply(result, mat)
            mat = multiply(mat, mat)
            power //= 2
        return result
    # Compute the K-th power of the matrix
    final_matrix = matrix_pow(matrix_total, K)
    print(final_matrix[0][0] % MOD)
if __name__ == "__main__":
    main()
            
            
            
        