Cod sursa(job #1597146)

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

using namespace std;

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

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

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

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

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

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

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

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

for (i = 1 ; i <= L ; ++i)
{
    d[i][i] = 1;

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

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

return 0;
}