zcmimi's blog

查看原题

点击跳转

计算出f_i表示二进制下i1的方案数

\displaystyle ans=\sum_{i=1}^{\log_2^n} i^{f_i}

#include<bits/stdc++.h>
const int N=55,P=10000007;
typedef long long ll;
ll n,f[N];
ll pw(ll x,ll b){
    ll res=1;
    for(;b;b>>=1,x=x*x%P)
        if(b&1)res=res*x%P;
    return res;
}
int main(){
    scanf("%lld",&n);
    int k=0;
    for(int j=49;~j;--j){
        for(int i=49;i;--i)
            f[i]+=f[i-1];
        if(n>>j&1)++f[k++];
    }
    ++f[k];
    ll ans=1;
    for(int i=1;i<=49;++i)
        ans=ans*pw(i,f[i])%P;
    printf("%lld\n",ans);
}
LG 4317 花神的数论题
comment评论
Search
search