猪学会了分身术,他正在数轴上练习这一术法。
初始时(第 000 秒),猪(相当于 111 个猪分身)位于原点(x=0x=0x=0)处。
111 个第 ttt 秒位于 x=ix=ix=i 处的猪分身会在第 ttt 秒结束后、第 t+1t+1t+1 秒开始前消失,同时产生 666 个猪分身,其中:
猪想知道,经过 nnn 秒后,有多少个猪分身曾在 x=n−1x=n-1x=n−1 处停留过。
形式化地,设第 ttt 秒位于 x=n−1x=n-1x=n−1 处的猪分身有 ftf_tft 个,求 ∑t=0nft\sum\limits_{t=0}^nf_tt=0∑nft。
答案对 998244353998244353998244353 取模。
我们在题目的最后给出了一定的提示。
一行一个整数 nnn(2≤n≤10182\le n\le10^{18}2≤n≤1018)。
一行一个整数,表示答案对 998244353998244353998244353 取模后的结果。
4
8
下面用 [g0,g1,g2,g3,⋯ ][g_0,g_1,g_2,g_3,\cdots][g0,g1,g2,g3,⋯] 来表示 x=ix=ix=i 处有 gig_igi 个猪分身(i=0,1,2,3,⋯i=0,1,2,3,\cdotsi=0,1,2,3,⋯):
所以,答案是 0+3+4+1+0=80+3+4+1+0=80+3+4+1+0=8。
10
1331
100
252917600
设 ppp 是正整数,容易证明:
设 bbb 是正整数,现欲求 aba^bab。
若 bbb 很大,则做 O(b)O(b)O(b) 次乘法是不可接受的。
设 bbb 的二进制表示为 ctct−1⋯c0‾\overline{c_tc_{t-1}\cdots c_0}ctct−1⋯c0,其中 t=⌊log2b⌋t=\lfloor\log_2b\rfloort=⌊log2b⌋,ci=⌊b2i⌋ mod 2c_i=\left\lfloor\dfrac{b}{2^i}\right\rfloor\bmod2ci=⌊2ib⌋mod2。
由 a2i+1=a2i×a2ia^{2^{i+1}}=a^{2^i}\times a^{2^i}a2i+1=a2i×a2i,先求出 a20,a21,⋯ ,a2ta^{2^0},a^{2^1},\cdots,a^{2^t}a20,a21,⋯,a2t,则
这样,就只需要做 O(logb)O(\log b)O(logb) 次乘法。