题意: 解法: 发现数位和与数的顺序无关,只和每种数位的个数有关. 枚举a的个数i,判断i个a和(n-i)个b组合能否是极好的数, 如果是,那么答案累加C(n,i). code: #include <bits/stdc++.h> #define int long long using namespace std; const int maxm=2e6+5; const int mod=1e9+7; int fac[maxm],inv[maxm]; int ppow(int a,int b,int mod){ int ans=1%mod;a%=mod; while(b){ if(b&1)ans=ans*a%mod; a=a*a%mod; b>>=1; } return ans; } void init(){ fac[0]=1; for(int i=1;i<maxm;i++)fac[i]=fac[i-1]*i%mod; inv[maxm-1]=ppow(fac[maxm-1],mod-2,mod); for(int i=maxm-2;i>=0;i--)inv[i]=(i+1)*inv[i+1]%mod; } int C(int n,int m){ if(m<0||m>n)return 0; return fac[n]*inv[m]%mod*inv[n-m]%mod; } // int a,b,n; int check(int x){ while(x){ if(x%10!=a&&x%10!=b)return 0; x/=10; } return 1; } void solve(){ init(); cin>>a>>b>>n; int ans=0; for(int i=0;i<=n;i++){//枚举a的个数 int s=i*a+(n-i)*b; if(check(s)){ ans=(ans+C(n,i))%mod; } } cout<<ans<<endl; } signed main(){ ios::sync_with_stdio(0);cin.tie(0); solve(); return 0; }