思路
发现最外层的累乘可以通过前缀积直接求出来,因此只需要求:
∏j=1i(ji)⌊ji⌋
发现分子
i 对答案影响不大,考虑将他们分开,得:
∏j=1ii⌊ji⌋(∏j=1ij⌊ji⌋)−1
即:
i∑j=1i⌊ji⌋(∏j=1ij⌊ji⌋)−1
考虑函数
f(x)=∑j=1x⌊jx⌋,发现
f(x)=f(x−1)+∑d∣x1,而一个数的因数个数可以在
O(nlogn) 的复杂度内求出,因此前半部分的复杂度即为
O(nlogn)。
现在的目标就是求出:
∏j=1ij⌊ji⌋
不妨假设函数
g(x)=∏j=1xj⌊jx⌋,发现
g(x)=g(x−1)×∏d∣xd,将
∏d∣xd 前后两两配对,发现若
x 为完全平方数,则
∏d∣xd=x∑d∣x∧d<x1x,否则有
∏d∣xd=x∑d∣x∧d<x1,因此也可以在
O(nlogn) 时间内求出。
最后将上面的所有东西相乘,做前缀积即可。