zoukankan      html  css  js  c++  java
  • 调和级数计算

    求H(n).如果精度要求很高..

    1. n<=1e8

    调和级数是能直接apply Binary Splitting method的,这样能计算出全精度的H(n)(分数形式).

    因为大家都知道好的Binary Splitting method是很快的(真的么..),用来计算Pi以复杂度的劣势能艹爆AGM..

    2. n很大(monstrously large)

    这个时候就需要Euler-Maclaurin展开..

    大家都知道的这个式子:

    H(n)=ln(n)+EulerGamma+1/(12n)-sum(i>=1,B_2i/(2i n^(2i)))

    (我曾经以为这东西是发散的..事实上它就是发散的..不过似乎没什么毛关系)

    现在考虑分别计算这些东西..

    ln(n)计算肯定是不能直接Taylor一发的..会boom..

    可以考虑先reduce到1+p,然后再对exp进行牛迭..

    如果p特别小可以考虑taylor一下..不过要换个series..

    EulerGamma没有直接好用的series,不过还是可以很快速的计算(quasi-linear!)的..比较崎岖..(还要吐槽一下它那个崎岖的做法里使用了调和级数..不过收敛得很快)

    后面那个东西因为是Bernoulli不方便变成HGS Sum..不过n以下的Bernoulli数是可以计算的,选O(n)个>=n+3的小素数求出bernoulli mod p(这个可以转化为卷!积!mod p),然后CRT一下.Bernoulli它有个好的性质就是它的分母超级他妈好算..num(B2k)=prod(p-1|2k & prime(p),p)..

    到wiki上翻一下bernoulli的asymptotic behavior..发现它B2n~4sqrt(pi n)(n/(pi e))^(2n)..那么它的位数大概是2.8n..

    然后我们来看看那个Euler-Maclaurin Formula的渐进behavior..估计一下余项大概是B_(2n+2)/((2n+4) x^(2n+4))~4 sqrt(pi n)/(2n+4)*((x)/(n pi e))^(2n+4) 毛咕咕是2n位十进制精度..

    好全篇民科hhh...

  • 相关阅读:
    vue 下拉框单选、多选以及默认值
    python 查询每周最后一个工作日
    微信开发
    win7 实用
    A Mixed Flash Translation Layer Structure for SLC-MLC Combined Flash Memory System
    暑假--升级攻击家庭wifi
    A New 3-bit Programming Algorithm using SLC-to-TLC Migration for 8MBs High Performance TLC NAND Flash Memory
    FTL方面综述
    Linux 脚本
    FTL-SLC&MTC&TLC
  • 原文地址:https://www.cnblogs.com/tmzbot/p/7078459.html
Copyright © 2011-2022 走看看