A
怎么是个FFT裸题啊…
直接通配符匹配的套路玩起来就好了吧…
*B
上午做题怎么都这么迷糊…
首先式子可以变成这个
∑
d
d
∑
i
∑
j
[
i
∗
j
∗
d
2
≤
n
]
[
g
c
d
(
i
,
j
)
=
1
]
\sum_d d\sum_i \sum_j[i*j*d^2\leq n][gcd(i,j)=1]
d∑di∑j∑[i∗j∗d2≤n][gcd(i,j)=1]
反演一手
∑
d
d
∑
k
μ
(
k
)
∑
i
⌊
n
d
2
k
2
i
⌋
\sum_dd\sum_k\mu(k)\sum_i\lfloor\frac{n}{d^2k^2i}\rfloor
d∑dk∑μ(k)i∑⌊d2k2in⌋
这时候
1
0
13
10^{13}
1013要
3
e
8
3e8
3e8左右…考虑枚举
d
k
dk
dk
∑
T
∑
i
⌊
n
T
2
i
⌋
∑
d
∣
T
μ
(
d
)
T
D
\sum_T \sum_{i}\lfloor\frac{n}{T^2i}\rfloor\sum_{d|T}\mu(d)\frac{T}{D}
T∑i∑⌊T2in⌋d∣T∑μ(d)DT
其实
μ
\mu
μ卷
i
d
id
id就是
ϕ
\phi
ϕ,那么后面写成
ϕ
\phi
ϕ就可以了
∑
T
∑
i
⌊
n
T
2
i
⌋
ϕ
(
T
)
\sum_T\sum_{i}\lfloor\frac{n}{T^2i}\rfloor\phi(T)
T∑i∑⌊T2in⌋ϕ(T)
前一维只有
(
n
)
\sqrt(n)
(n)
后面枚举的量也很少…似乎这样就可以过了
自己sb,感觉枚举乘积不能过就没想了
C
考虑往一个空序列里加数,如果
i
i
i位置加上了数字
j
j
j,那么
j
j
j位置也要加上数字
i
i
i
这样出来的序列就是对合的
然后考虑怎么弄数,我们可以枚举下标在
[
1
,
k
]
[1,k]
[1,k]中存在多少个
B
B
B中的数,显然是一段前缀。并且如果能填进去,方案是唯一的。因为能填的下标与个数相同,还要保证顺序
如果能填进去,不妨设
B
B
B序列剩下了
x
x
x个数,
A
A
A序列还剩下
n
−
k
n-k
n−k个数可以填,先放
B
B
B序列的话就是
C
n
−
k
x
C_{n-k}^{x}
Cn−kx,这样
A
A
A序列还有
n
−
k
−
x
n-k-x
n−k−x个位置需要互相放数,此时是独立的,直接预处理一个
f
[
i
]
f[i]
f[i]表示长度为
i
i
i的序列互相放有多少种方案
显然转移是
f
[
i
]
=
f
[
i
−
1
]
+
f
[
i
−
2
]
∗
(
n
−
1
)
f[i]=f[i-1]+f[i-2]*(n-1)
f[i]=f[i−1]+f[i−2]∗(n−1)