Cod sursa(job #1597165)

Utilizator ZenusTudor Costin Razvan Zenus Data 11 februarie 2016 19:01:17
Problema Descompuneri Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <bits/stdc++.h>

using namespace std;

int d[4009][4009];
long long n , divs[4009];
map < long long , int > w;
int k , L , i , j , c;

int main()
{
freopen("desc.in" , "r" , stdin);
freopen("desc.out" , "w" , stdout);

scanf("%lld" , &n);
scanf("%d" , &k);

for (i = 2 ; 1LL * i * i <= n ; ++i)
if (n % i == 0)
{
    L++;
    divs[L] = i;
    w[i] = L;
}

for (i = 2 ; 1LL * i * i < n ; ++i)
if (n % i == 0) ++L;

for (i = 2 ; 1LL * i * i < n ; ++i)
if (n % i == 0)
{
    w[n / i] = L;
    divs[L] = n / i;
    L--;
}

for (i = 2 ; 1LL * i * i < n ; ++i)
if (n % i == 0) ++L;

L++;
divs[L] = n;
w[n] = L;

for (j = L ; j ; --j)
{
    d[j][j] = 1;

    for (i = j + 1 ; i <= L ; ++i)
    {
        d[j][i] = d[j+1][i];
        if (divs[i] % divs[j] == 0)
        d[j][i] += d[j][w[divs[i] / divs[j]]];
    }
}

printf("%d\n" , d[1][L]);

return 0;
}