合成関数は結合法則が成立します.証明(数学の景色様) またfffの定義の仕方により,最後に(105+3)(10^5+3)(105+3)で割った余りを求めるのも, 合成をしながら(105+3)(10^5+3)(105+3)で割った余りを求めるのも計算結果は変わりません.
よって,ダブリングテーブルを前計算しておくことによって 各クエリに時間計算量O(logni)O(\log n_i)O(logni)で答えることができます. 問題全体としての時間計算量は m=max(ni),P=105+3m = \max (n_i),P=10^5+3m=max(ni),P=105+3として O((P+Q)logm)O((P+Q) \log m)O((P+Q)logm)となり, この問題の条件下では十分高速です. 整数型のサイズに上限がある言語で実装する場合はオーバーフローに気を付けてください.
実装例