C. Beautiful Numbers
这里求逆元用的 费马小定理
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int mod=1e9+7;
const int N=1e6+1;
ll fact[N];
void initfact(){//初始化阶乘矩阵 Cn,m=n!/(m!*(n-m)!)
fact[0]=1;
for(int i=1;i<N;i++){
fact[i]=(fact[i-1]*i%mod);
}
}
bool check(ll sum,int a,int b){
while(sum){
int x=sum%10;
if(x!=a&&x!=b)return false;
sum/=10;
}
return true;
}
ll quickPow(ll b,ll e){
b%=mod;
ll res=1;
while(e){
if(e&1)res=res*b%mod;
b=b*b%mod;
e>>=1;
}
return res;
}
ll getC(int n,int m){
// return fact[n]/fact[n-m]/fact[m];
return fact[n]*quickPow(fact[n-m],mod-2)%mod*(quickPow(fact[m],mod-2))%mod;
}
int main(){
int a,b,n;
cin>>a>>b>>n;
//n位的excellent数(每一位要么a要么b) 各位相加的和 每一位要么a要么b
// 假设有i位是a,则各位相加的和等于a*i+b*(n-i)
initfact();
ll cnt=0;
for(int i=0;i<=n;i++){
ll sum=a*i+b*(n-i);
if(check(sum,a,b)){
cnt+=getC(n,i);
cnt%=mod;
}
}
cout<<cnt;
return 0;
}