提交时间:2024-07-19 12:34:04
运行 ID: 30378
#include <bits/stdc++.h> using namespace std; typedef long long ll; vector<ll> fac; ll x, k, m, now, ans; void dfs(ll u, ll d) { if (u == 1) { ans++; if (++now == m) { printf("%lld\n", ans); fclose(stdin); fclose(stdout); exit(0); } return; } if (d == k) { ans += u; if (++now == m) { printf("%lld\n", ans); fclose(stdin); fclose(stdout); exit(0); } return; } for (int i : fac) { if (i > u) break; if (u % i) continue; dfs(i, d + 1); } } int main() { scanf("%lld%lld%lld", &x, &k, &m); for (ll i = 1; i * i <= x; i++) { if (x % i) continue; fac.push_back(i); if (i != x / i) fac.push_back(x / i); } sort(fac.begin(), fac.end()); dfs(x, 0); printf("%lld\n", ans); return 0; }