Cod sursa(job #3367488)

Utilizator swissteaSwasti swisstea Data 8 octombrie 2026 11:12:40
Problema Descompuneri Scor 12
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.66 kb
#include <bits/stdc++.h>
using namespace std;
#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());
        vvi dres(m+1, vi(m+1)), 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';

    }
}