求助:错误 exLucas 写法通过模板?
  • 板块学术版
  • 楼主NGC5457
  • 当前回复26
  • 已保存回复26
  • 发布时间2023/1/15 15:18
  • 上次更新2023/10/24 04:08:23
查看原帖
求助:错误 exLucas 写法通过模板?
241614
NGC5457楼主2023/1/15 15:18

如题。我发现在计算 (n!)pmodpk(n!)_p\bmod p^k 时,我采用如下算法:

pair <int, int> calc (int64_t n) {
    int64_t f = 1, c = 0;
    bool ubd = n < p;
    while (n) (f *= fact[n % p]) %= p_k, c += n /= p;
    (f *= (ubd ? 1 : fpow (fact[p-1], c, p_k))) %= p_k;
    return { f, c };
}

其中 p_kpkp^kfact[x] 表示 x!modpkx!\bmod p^kcc 满足 pcn!pc+1n!p^c\mid n!\land p^{c+1}\nmid n!。很明显我每一步分治以 pp 为阶段划分(当时脑子抽了以为 (tp1)p1((t1)p1)p1(modp)k,t>0(tp-1)^{\underline{p-1}}\equiv ((t-1)p-1)^{\underline{p-1}}\pmod p^k,t>0),所以最后乘上了 (p1)cmodpk(p-1)^c\bmod p^k。但正确方式显然是以 pkp^k 为阶段划分。

可是它过了模板诶!

请问是数据水导致一定有 k=1k=1 还是别的什么原因?

2023/1/15 15:18
加载中...