Cod sursa(job #2628933)

Utilizator CraniXortDumitrescul Eduard CraniXort Data 18 iunie 2020 12:01:43
Problema Descompuneri Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <bits/stdc++.h>

std::ifstream fin ("desc.in");
std::ofstream fout ("desc.out");

std::vector <long long> d;

int main()
{
    long long n, k, i, j, divisor;
    fin >> n >> k;
    for (i=1; i*i<=n; i++){
        if (n % i == 0){
            d.push_back (i);
            if (n / i != i)
            d.push_back (n/i);
        }
    }
    std::sort (d.begin(), d.end());
    /*
    for (i=0; i<d.size(); i++)
        fout << d[i] << ' ';
        */

    int dp[d.size()+2][d.size()+2];
    int last;
    memset (dp, 0, sizeof dp);

    for (i=0; i<d.size(); i++)
        dp[0][i] = 1;
    for (i=1; i<d.size(); i++){

        last = 0;
        for (j=d.size()-1; j>=0; j--){
            divisor = d[i];
            dp[i][j] = dp[i][j+1];
            if (divisor % d[j] == 0){
                divisor /= d[j];
                while (d[last] < divisor)
                    last ++;
                dp[i][j] += dp[last][j];
            }
        }
    }
    /*
    for (i=0; i<d.size(); i++, fout << '\n'){
        fout << d[i] << " - ";
        for (j=0; j<d.size(); j++)
        fout << dp[i][j] << ' ';
    }
    */

    fout << dp[d.size()-1][1] << ' ';



    return 0;
}