题解做法看不懂
查看原帖
题解做法看不懂
135160
Yzm007楼主2020/5/21 18:48
#include<cstdio>
#define LL long long
#define M 10000007
LL N,Ans=1;
LL C,G[50];
LL qPow(LL b,LL e){LL A=1;for(;e;b=b*b%M,e>>=1)e&1?A=A*b%M:0;return A;}
int main(){
	scanf("%lld",&N);
	for(int j=49;~j;--j){
		for(int i=49;i;--i)
			G[i]+=G[i-1];
		if(N>>j&1) ++G[C++];
	} ++G[C];
	for(int i=1;i<=49;++i)
		Ans=Ans*qPow(i,G[i])%M;
	printf("%lld",Ans);
	return 0;
}

这个题我用枚举数位和的方法莽过去了, 但是一看题解,发现粉兔的做法好简洁啊, 能不能求助下这样做是什么原理,表示看不懂……

2020/5/21 18:48
加载中...