求助大佬改错。。。
我自认为思路和小粉兔的题解类似,就是他的一维我看不明白,我用了更好理解的二维然后不知道哪出问题了。
#include <bits/stdc++.h>
#define int long long
using namespace std;
inline int gin(){
char c=getchar();
int s=0,f=1;
while(c<'0'||c>'9'){
if(c=='-')f=-1;
c=getchar();
}
while(c>='0'&&c<='9'){
s=(s<<3)+(s<<1)+(c^48);
c=getchar();
}
return s*f;
}
const int mod=1e7+7;
int n,f[60][60];
int qPow(int a,int b){
int ans=1;
int base=a%mod;
while(b){
if(b&1!=0)ans=(ans*base)%mod;
base=(base*base)%mod;
b>>=1;
}
return ans;
}
signed main(){
n=gin();
int len=0;
while(n){
len++;
n>>=1;
}
f[0][0]=1;
for(int i=1;i<=len;i++){
f[i][0]=f[i-1][0];
for(int j=1;j<=i;j++)f[i][j]=f[i-1][j]+f[i-1][j-1];
}
int ans=1;
for(int i=1;i<=len;i++)ans=ans*qPow(i,f[len][i]);
printf("%lld\n",ans);
return 0;
}