求助dalao
查看原帖
求助dalao
867875
niveKmAI楼主2024/1/22 19:32
#include<bits/stdc++.h>
using namespace std;
const int mod= 1e9+7;
long long f[2000005];
long long qpow(long long a,long long b){
	long long s=1;
	while(b){
		if(b&1) s=s*a%mod;
		a=a*a%mod;
		b>>=1;
	}
	return s;
}
signed main(){
	long long t;
	cin>>t;
	f[0]=1;
	f[1]=1;
	f[2]=2;
	for(int i=3; i<=1e6; i++){
		f[i]=f[i-1]*i%mod; 
	}
	while(t--){
		long long n,k;
		cin>>n>>k;
		if(log2(n)<=k){
			cout<<f[n]<<endl;
		    continue;
		}
		else if(k==0){
			cout<<1<<endl;
			continue;
		}
		cout<<((qpow(qpow(f[n/(1<<k)],mod-2),n-(n%(1<<k))))%mod*(qpow(qpow(f[n/(1<<k)+1],mod-2),n%(1<<k))%mod)*f[n])%mod<<endl;
		} 
	return 0;
} 
2024/1/22 19:32
加载中...