题意:
求质数 p p p 在 1 ∼ n 1∼n 1∼n 中的每个数中的次幂之和.
因为 p p p 是一个质数,只能由 1 1 1 乘以 p p p 表示出来,所以可以将问题转化为求 p p p 在 n ! n! n! 中出现的次幂.
我们可以像提取公因式一样地去提取这个 p p p.
那么,先考虑
p
p
p 的贡献:
1
∼
n
1∼n
1∼n 中能被
p
p
p 整除的乘积为
p
n
p
×
(
n
p
!
)
p^{\frac{n}p}×(\frac{n}p!)
ppn×(pn!)
然后递归处理啊
n
p
!
\frac{n}p!
pn! 中
p
p
p 出现的次数。
AC代码:
const int N = 2e5 + 10;
vector<ll> v;
ll x, n, m, p;
int main()
{
sldd(x, n);
p = x;
rep(i, 2, sqrt(p))
{
if (p % i == 0)
{
v.push_back(i);
while (p % i == 0)
{
p /= i;
}
}
}
if (p > 1)
v.push_back(p);
ll ans = 1ll;
rep(i, 0, v.size() - 1)
{
m = n;
ll res = 0;
while (m >= v[i])
{
res += m / v[i];
m /= v[i];
}
ans = ans * qpow(v[i], res, MOD) % MOD;
}
pld(ans);
return 0;
}