Cod sursa(job #2560623)

Utilizator mihaimodiMihai Modi mihaimodi Data 28 februarie 2020 10:15:26
Problema Descompuneri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <fstream>
#include <cmath>
#include <algorithm>
#include <unordered_map>
using namespace std;
ifstream fin("desc.in");
ofstream fout("desc.out");
long long dz[5000];
long long n;
int d[5000][5000];
int pz,k;
unordered_map< long long, int >h;
int main()
{
    fin>>n>>pz;
    for(long long i=1;i*i<n;i++)
        if(n%i==0)
          dz[++k]=i,dz[++k]=n/i;
    if(sqrt(n)*sqrt(n)==n)
        dz[++k]=sqrt(n);
    sort(dz+1,dz+k+1);

    for(int i=1;i<=k;i++)
        h[dz[i]]=i;
    for(int i=1;i<=k;i++)
        d[1][i]=1;
    for(int i=2;i<=k;i++)
    {
        long long di=dz[i];
        d[i][i]=1;
        for(int j=i;j>=2;j--)
        {
            d[i][j]=d[i][j+1];
            long long dj=dz[j];
            if(di%dj==0)
                d[i][j]+=d[h[di/dj]][j];
        }
        d[i][1]=d[i][2];
    }
    fout<<d[k][1]<<'\n';
    int p=2;
    while(n>1)
        while(p<=k)
        {
            if(n%dz[p]==0)
            {
                long long cat=n/dz[p];
                int poz=h[cat];
                if(d[poz][p]<pz)
                    pz-=d[poz][p];
                else
                {
                    fout<<dz[p]<<' ';
                    n=cat;
                    break;
                }
            }
            p++;
        }
    return 0;
}