50分WA求助xx
查看原帖
50分WA求助xx
242931
zjqzjq楼主2022/8/15 15:06
#include<bits/stdc++.h>
using namespace std;
long long n,mod=10000007;
long long c[65][65];
long long power(long long x,long long y){
    if(y==0) return 1;
    long long tmp=power(x,y/2);
    if(y&1) return tmp*tmp%mod*x%mod;
    return tmp*tmp%mod;
}
long long ans=1;
void dfs(long long x,long long one){
    if(x==-1){
        ans=ans*one%mod;
        return;
    }
    if((n&(1ll<<x))==0) dfs(x-1,one);
    else{
        for(long long i=0;i<=x;i++)
            if(one+i) ans=(ans*power(one+i,c[x][i]))%mod;
        dfs(x-1,one+1);
    }
}
int main(){
    cin>>n;
    for(int i=0;i<=61;i++) c[i][i]=c[i][0]=1;
    for(int i=1;i<=61;i++){
        for(int j=1;j<i;j++){
            c[i][j]=(c[i-1][j-1]+c[i-1][j])%mod;
        }
    }
    dfs(61,0);
    cout<<ans;
    return 0;
}

2022/8/15 15:06
加载中...