Можете покидать теории по матрицам? Недавно на школьной олимпе встретилось бинарное возведение матрицы, вообще офигел с этого, когда узнал
достаточно знать что если есть состояние, значение которого определяется как линейная комбинация предыдущих состояний (то есть current = a*prev+b*prev_prev+c*prev_prev_prev ...) то это можно выразить как умножение вектора на матрицу, ну а это в свою очередь повзоляет быстро подносить ее в степень