Pagini recente » Borderou de evaluare (job #3367497) | Borderou de evaluare (job #3367492) | Cod sursa (job #3367488) | Cod sursa (job #3367490) | Cod sursa (job #3367489)
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pii pair<int, int>
#define piii pair<pii, int>
#define ipii pair<int, pii>
#define pipi pair<pii, pii>
#define f first
#define s second
#define vi vector<int>
#define vvi vector<vi>
#define vvvi vector<vvi>
#define vb vector<bool>
#define vc vector<char>
#define vt vector
#define pb push_back
#define cntn continue
const int N = 1e7+5;
const int INF = 1e12+5;
const int MOD = 1e9+7;
signed main() {
freopen("desc.in", "r", stdin);
freopen("desc.out", "w", stdout);
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int T; T = 1; while (T--) {
int n, k; cin >> n >> k;
vi div;
for (int i = 1; i*i <= n; i++) {
if (n%i == 0) {
div.pb(i);
if (i*i != n) div.pb(n/i);
}
}
int m = div.size();
div.pb(0);
sort(div.begin(), div.end());
vt<vt<short>> dres(m+1, vt<short>(m+1));
vvi dp(m+1, vi(m+2));
for (int i = 1; i <= m; i++) {
int cr = 1;
for (int j = i; j <= m; j++) {
if (div[j]%div[i] != 0) cntn;
while (cr <= m && div[i]*div[cr] < div[j]) cr++;
dres[j][i] = cr;
}
}
for (int j = 1; j <= m+1; j++) dp[1][j] = 1;
for (int i = 2; i <= m; i++) {
for (int j = i; j >= 1; j--) {
if (dres[i][j] == 0) {
dp[i][j] = dp[i][j+1];
}
else {
dp[i][j] = dp[i][j+1]+dp[dres[i][j]][j];
}
}
}
cout << dp[m][1] << '\n';
}
}