Cod sursa(job #1522245)

Utilizator akaprosAna Kapros akapros Data 11 noiembrie 2015 14:10:56
Problema Descompuneri Scor 12
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <cstdio>
#include <cstring>
#include <algorithm>
#define maxN 1000002
#define maxD 1002
using namespace std;
int n, m, k, d[maxN], dp[maxD][maxD];
int cmp(int a, int b)
{
    return a > b;
}
void read()
{
    int i, j;
    freopen("desc.in", "r", stdin);
    scanf("%lld %d", &n, &m);
    for (i = 1; (long long)(i * i * 1LL) <= n; ++ i)
        if (n % i == 0)
    {
        if (i != 1)
            d[++ d[0]] = i;
        if (n / i != i)
            d[++ d[0]] = n / i;
    }
    sort(d + 1, d + d[0] + 1);
}
void solve()
{
    int i, j;
    for (i = 1; i <= (m = d[0]); ++ i)
    {
        int pos = 1;
        for (j = i; j >= 1; -- j)
    {
        if (d[i] % d[j])
        dp[i][j] = dp[i][j + 1];
            else
        {
            while (d[i] / d[j] > d[pos] && pos < d[0])
                ++ pos;
            dp[i][j] = dp[pos][j] + dp[i][j + 1];
        }
        if (j == i)
            ++ dp[i][j];
    }
    }
}
void write()
{
    freopen("desc.out", "w", stdout);
    printf("%d\n", dp[m][1]);
}
int main()
{
    read();
    solve();
    write();
    return 0;
}