对于分成两块
求组合数求余——这里用杨辉三角
求快速幂
#include <iostream>
using namespace std;

const int mod=10007;
const int N=1005;

long long  a,b,k,n,m,mi,ans;
long long  yh[N][N];
void myhSt(int n){//杨辉三角
	for(int i=0;i<=n;i++){
		yh[i][0]=yh[i][i]=1;
	}
	for(int i=2;i<=n;i++)
	for(int j=1;j<n;j++){
		yh[i][j]=yh[i-1][j-1]+yh[i-1][j];
		yh[i][j]%=mod;
	}
}

long long  qmi(int a,int n){
	long long res=1;
	a%=mod;
	while(n){
		if(n&1) res=res*a%mod;
		n>>=1;
		a=a*a%mod;
	}
	return res;
}

int main(int argc, char** argv) {
	cin>>a>>b>>k>>n>>m;
	myhSt(k);
	a%=mod; b%=mod;
	ans=qmi(a,n);
	ans=ans*qmi(b,m)%mod;
	ans=ans*yh[k][m]%mod;
	cout<<ans%mod<<endl;
	return 0;
}
一开始我求是把C的分子和分母都先mod在相除,但这样会出错
这里数小用杨辉三角,数大用Lucas定理(卢卡斯)
Lucas定理: