Cod sursa(job #2641802)

Utilizator stefantagaTaga Stefan stefantaga Data 12 august 2020 18:40:30
Problema Descompuneri Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <bits/stdc++.h>

using namespace std;
ifstream f("desc.in");
ofstream g("desc.out");
long long fact[21],n,m,d,numar,maxim,suma,sol,valoare,numere,din[30005],j,divizori[30005],q,copie,nr;
int dp[10005][10005],i;
map <long long,int > poz;
int main()
{
    f>>n>>m;
    for (i=1;i*i<n;i++)
    {
        if (n%i==0)
        {
            divizori[++q]=i;
            divizori[++q]=n/i;
        }
    }
    if (i*i==n)
    {
        divizori[++q]=i;
    }
    sort (divizori+1,divizori+q+1);
    for (i=1;i<=q;i++)
    {
        poz[divizori[i]]=i;
        dp[1][i]=1;
    }
    for (i=2;i<=q;i++)
    {
        for (j=i;j>=2;j--)
        {
            dp[i][j]=dp[i][j+1];
            if (divizori[i]%divizori[j]==0)
            {
                dp[i][j]+=dp[poz[divizori[i]/divizori[j]]][j];
            }
        }
        dp[i][1]=dp[i][2];
    }
    g<<dp[q][1];
    i=2;
    while (n>1)
    {
        for (;i<=nr;i++)
        {
            if (n%divizori[i]==0)
            {
                long long valoare=n/divizori[i];
                if (dp[poz[valoare]][i]<m)
                {
                    m-=dp[poz[valoare]][i];
                }
                else
                {
                    g<<divizori[i]<<" ";
                    n=valoare;
                    break;
                }
            }
        }
    }
    return 0;
}