Cod sursa(job #1597160)

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

using namespace std;

int d[2][5009];
long long n , divs[5009];
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)
{
    c = j % 2;

    memset(d[c] , 0 , sizeof(d[c]));
    d[c][j] = 1;

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

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

return 0;
}