Cod sursa(job #2641805)

Utilizator stefantagaTaga Stefan stefantaga Data 12 august 2020 18:43:16
Problema Descompuneri Scor 30
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");
int m,d,numar,maxim,suma,sol,valoare,numere,j,q,copie,nr;
int dp[10005][10005],i;
long long n,divizori[30005];
unordered_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]<<'\n';
    i=2;
while (n>1)
    {
        for (;i<=q;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;
}