题意
一个数字称为good数要满足两个条件
- 它只有
和
组成
- 它的位数之和也只有
和
组成
求位数的数字一共有多少个good数
思路
我们假设有个
和
个
,那么可以知道和为
,这个和最多也才
那么我们可以枚举和,然后算出,然后接着这
个
可以任意插在
位里面,也就是
代码
/**
* author: andif
* created: 24.08.2023 22:45:45
**/
#include<bits/stdc++.h>
using namespace std;
#define de(x) cerr << #x << " = " << x << endl
#define dd(x) cerr << #x << " = " << x << " "
#define rep(i, a, b) for(int i = a; i < b; ++i)
#define per(i, a, b) for(int i = a; i > b; --i)
#define mt(a, b) memset(a, b, sizeof(a))
#define sz(a) (int)a.size()
#define fi first
#define se second
#define qc ios_base::sync_with_stdio(0);cin.tie(0)
#define eb emplace_back
#define all(a) a.begin(), a.end()
using ll = long long;
using db = double;
using pii = pair<int, int>;
using pdd = pair<db, db>;
using pll = pair<ll, ll>;
using vi = vector<int>;
const db eps = 1e-9;
const int mod = 1e9 + 7;
const int N = 1e6 + 6;
int qpow(int a, int b) {
int ret = 1;
while(b) {
if (b & 1) {
ret = 1ll * ret * a % mod;
}
a = 1ll * a * a % mod;
b >>= 1;
}
return ret;
}
int main() {
qc;
int a, b, n; cin >> a >> b >> n;
if (n == 1) return cout << "2" << '\n', 0;
int ans = 0;
vi f(N);
f[0] = 1;
rep(i, 1, N) f[i] = 1ll * i * f[i - 1] % mod;
vi inv(N);
inv[N - 1] = qpow(f[N - 1], mod - 2);
per(i, N - 2, 0) inv[i] = 1ll * inv[i + 1] * (i + 1) % mod;
// per(i, N - 1, 0) {
// if (1ll * inv[i] * f[i] % mod != 1) {
// de(i);
// break;
// }
// }
auto check = [&] (int x) {
while(x) {
int y = x % 10;
if (y != a && y != b) return false;
x /= 10;
}
return true;
};
rep(i, 0, 9 * n + 1) {
if (!check(i)) continue;
int y = i - b * n;
if (y % (a - b) != 0) continue;
int x = y / (a - b);
if (x < 0 || n - x < 0) continue;
if (!x || !(n - x)) {
ans = (ans + 1) % mod;
} else {
// dd(x), dd(n - x), dd(f[n]), dd(inv[n - x]), de(inv[x]);
ans = (ans + 1ll * f[n] * inv[n - x] % mod * inv[x] % mod) % mod;
}
}
cout << ans << '\n';
return 0;
}