A. B
$[n=1]=\sum \limits_{d|n} \mu(d)$
於是考慮用莫比烏斯函數容斥出題意中的$[gcd=1]$。
設$f_n$表示$gcd$為$n$的倍數的答案。
$g_n$表示$gcd$為$n$的答案。
$g_1=\sum \limits_{i=1}^n\mu(i)f_i$
考慮如何求出$f_i$,即整個序列均選擇$i$的倍數。
$n$以內$i$的倍數總共有$\lfloor \frac{n}{i} \rfloor$個。
為了保證單調遞增,考慮插板法,即在長度為$k$的序列中插入$\lfloor \frac{n}{i} \rfloor-1$個板,來實現分塊遞增的效果。
然后發現式子化到這里答案只與$\lfloor \frac{n}{i} \rfloor$有關了,所以直接整除分塊套個度教篩就好了。
然后發現$\lfloor \frac{n}{i} \rfloor$可能達到很大的級別,並不能預處理階乘。
但是明眼人都能看出來,只要將階乘預處理$n^{\frac{2}{3}}$,對於大的部分暴力就好了。
因為題中保證$k$並不大,可以算出來這個總復雜度是不超過$n^{\frac{2}{3}}$的。
B. B君的回憶
要求$g(g(g(g(g(...g(n)...)))))$。
考慮最簡單的情況$g(n)$,直接矩陣快速冪就好了。
對於$g(g(n))$,因為里面的數過大,就不會做了。
然而可以發現這個數列存在循環節,可以證明這個循環節是從(轉移矩陣的)首項開始的。
只要求出$g$函數在模$p$意義下的循環節$p'$,就可以使內層的$g(n)$對$p'$取模,也就解決了這個問題。
所以題意是求類菲波那契數列循環節。
打表可以發現這個級別並不大,差不多是與模數同級的。
考慮直接通過$bsgs$處理轉移矩陣在模$p$意義下的循環節。
然而這個做法的復雜度有丶高,所以考慮一些性質。
設$f(mod)$表示該轉移矩陣在模$mod$意義下的循環節。
對$mod$質因數分解為$\prod_{i=1}^{cnt}p_i^{c_i}$。
對於互質的$f(p_i^{c_i})$,$f(p_j^{c_j})$,有$f(p_i^{c_i}p_j^{c_j})=lcm(f(p_i^{c_i}),f(p_j^{c_j}))$,這個似乎是顯然的。
問題轉化為求$f(p_i^{c_i})$,根據題解我們知道打表發現$f(p_i^{c_i})=f(p_i)p_i^{c_i-1}$,似乎根據類似歐拉函數的性質理解也是可行的。
所以只要求模質數的循環節,質因數分解,搞一下記憶化就能$AC$了。
C. sanrd
考試的時候大概推出來了式子,但是有一個很重要的技巧沒有想到,於是完戲了。
給定數組$a$,常數$c$,要求對於所有的$k \in [0,n]$,$s_k=\sum \limits_{i=0}^{m}c^{2ik}a_i$。
很神的展開辦法是將$2ik$轉化為$(i+k)^2-i^2-k^2$,原式轉化為$s_k=\frac{1}{c^{k^2}}\sum \limits_{i=0}^mc^{(i+k)^2}\frac{a_i}{c^{i^2}}$,
於是原式可以通過將一個多項式翻轉,相減為定值的卷積求出。
另外一個技巧是將一個式子$bc^{4k}+dc^{2k}+e$簡單的轉化為$b(c^{2k}+\frac{d}{2b})^2+e-\frac{d^2}{4b}$。
三項式轉化為二項式,可以通過二項式定理展開。
然而需要注意當不保證$b!=0$的情況下,需要加一些特判。
另外,本題實際上為多項式多點求值模板題。
多點求值的思想是對每個要求的值$x_0$,使$A$多項式對多項式$x-x_0$取模,模出的一次項即要求的點值。
證明的方法是:令$F=A/(x-x_0)$,$G=A$%$(x-x_0)$,那么有$F(x-x_0)+G=A$,將$x=x_0$代入可得$G=A$。
一個較快的實現方法是:令要代入的值為$v_i$,當前分治區間為$[l,r]$,求得多項式$B=\prod_{i=l}^{r}(x-v_i)$。
進入分治的過程中使$A$對$B$取模就好了。(當然這里的$B$多項式也要通過分治預處理)
因為$B$是區間內任意一個$x-v_i$的倍數,這樣取模的做法顯然是正確的。
