尤拉計劃704:二項式係數中的2因數

lt發表於2020-03-01

設g(n,m)是c(n,m)的因數2的最大次數,例如c(12,5)=792=2^3⋅3^2⋅11,因此g(12,5)=3.
再設F(n)=max{g(n,m):0<=m<=n}.F(10)=3,F(100)=6.
設S(N)= ∑F(n)(n=1~N).已知S(100)=389,S(10^7)=203222840.
求S(10^16).

long long S(long long a)
{
    int n[100]= {0};
    int c=0;
    long long s=0;
    for (int i=0; i<100; i++)
    {
        if((a&1)==1)
        {
            n[c++]=i;
        }
        a>>=1;
        if(a==0)break;
    }
    for(int i=0; i<c-1; i++)
        s+=((n[c-1]-1)*(1LL<<n[i])+1);
    int x=n[c-1];
    s+=((x-3)*(1LL<<x)+2*x+3);
    printf("s=%lld\n",s);
}

相關文章