#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef LOCAL #include "debug.h" #else #define debug(x...) #endif /* #pragma GCC optimize("Ofast") #pragma GCC optimize("O3") #pragma GCC optimize("unroll-loops") */ //#define int ll using namespace std; typedef long long ll; typedef long double ld; typedef pair < int, int > pii; typedef pair < ll, ll > pll; #define sz(x) int((x).size()) #ifndef LOCAL mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); #else mt19937 rng(228); #endif const int N = 5e2 + 7;; const int inf = INT_MAX / 2; const ll INF = LLONG_MAX / 3; const int MOD = 1e9 + 7; const double eps = 1e-6; const string cars[] = {"🚗", "🚕", "🚙"}; int ans, n; vector < int > d, d_; struct Hash { size_t operator() (const pii& x) const noexcept { return (x.first + 1) + (x.second + 1) * 229; } }; unordered_map < pii, int, Hash > a; void f(int p, ll mul, char k, int i, char m) { //cout << k << " " << m << endl; if (k == m) { ans++; return; } for (; i < sz(d); i++) { if (a[{ p, d[i] }] == 1) { if (mul * d[i] > n) { continue; } f(d[i], mul * d[i], k + 1, i + 1, m); } } } signed main() { #ifdef LOCAL freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); #endif cout << fixed << setprecision(4); ios::sync_with_stdio(false); cin.tie(); cout.tie(); int m; cin >> n >> m; for (int i = 1; i * i <= n; i++) { if (n % i == 0) { d.push_back(i); if (i * i != n) { d_.push_back(n / i); } } } for (int i = sz(d_) - 1; i >= 0; i--) { d.push_back(d_[i]); } debug(d); a.rehash(1e6); for (int i = 0; i < sz(d); i++) { for (int j = i + 1; j < sz(d); j++) { a[{ d[i], d[j] }] = __gcd(d[i], d[j]); } a[{ 1, d[i] }] = 1; } f(1, 1, 'a', 0, 'a' + m); cout << ans; return 0; }