看看代码。
#include<bits/stdc++.h>
using namespace std;
#define il inline
#define ri register int
const int mod=10000007;
int a;
long long dp[202][202];
il long long got(int x)
{
int num[101],cnt=0,use=0;
long long rn=1;
while(x!=0)
{
cnt++;
num[cnt]=x&1;
x>>=1;
}
for(ri i=cnt;i>=1;i--)
{
if(num[i]==1)
{
rn*=dp[i-1][use];
rn%=mod;
use++;
}
}
return rn;
}
int main()
{
// tsc[0][0]=1;
// dp[0][0]=1;
// dp[1][0]=1;
for(ri i=0;i<=100;i++)
{
dp[0][i]=i+1;
dp[1][i]=(i+1)*(i+1);
}
for(ri i=2;i<=100;i++)
{
for(ri j=0;j<=100;j++)
{
dp[i][j]=dp[i-1][j]*dp[i-1][j+1]*(j+1)/(j+2);
dp[i][j]%=mod;
}
}
// for(ri i=0;i<=50;i++)
// {
// for(ri j=0;j<=50;j++)
// {
// printf("%lld ",dp[i][j]);
// }
// puts("");
// }
scanf("%d",&a);
printf("%lld",got(a));
return 0;
}
/*
*/