第一种 快速幂
#include<iostream>
using namespace std;
typedef long long ll;
const int mod=10007;
int a,b,k,n,m;
int qmi(int a,int b){
int res=1;
for(;b;b>>=1){
if(b&1) res=(ll)res*a%mod;
a=(ll)a*a%mod;
}
return res;
}
int C(int a,int b){
int res=1;
for(int i=1,j=a;i<=b;i++,j--)
res=(ll)res*j%mod*qmi(i,mod-2)%mod;
return res;
}
int main(){
cin>>a>>b>>k>>n>>m;
cout<<C(k,n)*qmi(a,n)%mod*qmi(b,m)%mod<<endl;
return 0;
}
第二种 扩展欧几里得求逆元
#include<iostream>
using namespace std;
typedef long long ll;
const int mod=10007;
int a,b,k,n,m;
void exgcd(int a,int b,int &x,int &y){
if(!b){
x=1,y=0;
return ;
}
exgcd(b,a%b,y,x);
y-=a/b*x;
}
int qmi(int a,int b){
int res=1;
for(;b;b>>=1){
if(b&1) res=(ll)res*a%mod;
a=(ll)a*a%mod;
}
return res;
}
int C(int a,int b){
int res=1,x,y;
for(int i=1,j=a;i<=b;i++,j--){
exgcd(i,mod,x,y);
res=(ll)res*j%mod*(x%mod+mod)%mod;
}
return res;
}
int main(){
cin>>a>>b>>k>>n>>m;
cout<<C(k,n)*qmi(a,n)%mod*qmi(b,m)%mod<<endl;
return 0;
}