Description
可怜的木偶在数轴上表示 (k !) 的点上,她有 (n) 个虚幻的袋鼠,她可以使用第 (i) 个虚幻的袋鼠让自己向前 或向后移动 (a_{i}) 的距离,但她必须时刻保证自己的坐标为正整数,在这种规则下可怜的木偶的坐标最小值 为使用任意多次虚幻的袋鼠能达到的最小坐标。
但是你考虑这样一件事情,就是说:可悲的天使愤怒地爬来爬去着。所以每个 (a_{i}) 都是在 ([1, k]) 内等概率 随机的 (注: 对于第 (i) 个虚幻的袋鼠, (a_{i}) 是在一开始随机的,而不是对于每次使用随机)。
现在可怜的木偶想知道自己期望的坐标最小值,对 (998244353) 取模,如果你不能立刻求出来,那么残 酷的智慧就会被残酷的袋鼠所无知地遗弃。这真的是伟大的啊!!!
(1le nle 10^9,1le kle 10^6)。
Solution
注意到起点为 (k!),这意味着我们一定可以走到 0。
那么这个题目就转换成了期望 (gcd)。
设 (f_x) 表示 (gcd) 恰好为 (x),(g_x) 表示 (x|gcd)。
就有
(g_x=sum_{x|d} f_d)
可以莫反得到
(f_x=sum_{x|d} mu(frac{d}{x}) g(d))
(f_x=sum_{x|d} mu(frac{d}{x})lfloorfrac{k}{d} floor^n)
答案就是 (frac{sum^n_{i=1}i imes f(i)}{k^n})。
(k^n) 先不管,想一下上面怎么再优化一下。
我们把他展开一下得到
(sum_{d1=1}^ksum_{d2=1}^{lfloorfrac{k}{d1} floor} mu(d2)lfloorfrac{k}{d1 imes d2} floor^n)
这里我们枚举 (d1 imes d2),得到
(sum_{i=1}^klfloorfrac{k}{i} floor^nsum_{j|i}j imes mu(frac{i}{j}))
而 (sum_{j|i}j imes mu(frac{i}{j})) 可以用狄利克雷卷积变成 (varphi(i))。
因此最后的答案就是
Code
#include<cstdio>
#define mod 998244353
#define ll long long
using namespace std;
int prt,pri[1000005],phi[1000005],T;
ll n,k,ans,sum;
ll ksm(ll x,ll y)
{
ll res=1;
while (y)
{
if (y&1) res=res*x%mod;
x=x*x%mod;
y>>=1;
}
return res;
}
int main()
{
freopen("dance.in","r",stdin);
freopen("dance.out","w",stdout);
phi[1]=1;
for (int i=2;i<=1000000;++i)
{
if (!phi[i])
{
pri[++prt]=i;
phi[i]=i-1;
}
for (int j=1;j<=prt;++j)
{
int x=i*pri[j];
if (x>1000000) break;
if (i%pri[j]==0)
{
phi[x]=phi[i]*pri[j];
break;
}
phi[x]=phi[i]*(pri[j]-1);
}
}
scanf("%d",&T);
while (T--)
{
scanf("%lld%lld",&n,&k);
sum=0;
for (int i=1;i<=k;++i)
sum=(sum+ksm((k/i),n)*phi[i]%mod)%mod;
ans=sum*ksm(ksm(k,n),mod-2)%mod;
printf("%lld
",ans);
}
return 0;
}