Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
30378 | gaochunzhen | 【S】T1 | C++ | 解答错误 | 40 | 110 MS | 131324 KB | 977 | 2024-07-19 12:34:04 |
#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; }