Cod sursa(job #3272535)

Utilizator AlexSerban21Serban Alexandru AlexSerban21 Data 29 ianuarie 2025 18:37:08
Problema Descompuneri Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <fstream>
#include <unordered_map>
#include <algorithm>
#define dim 3100
using namespace std;
ifstream fin ("desc.in");
ofstream fout ("desc.out");
unordered_map <int,int> fr;
long long n,i,d,nrc,nr,k,dp[dim+1][dim+1],v[dim+1];
int main()
{
    fin>>n>>nrc;
    if (n==1)
    {
        fout<<"1\n1";
        return 0;
    }
    for (d=2; d*d<n; d++)
    {
        if (n%d==0)
            v[++k]=d,v[++k]=n/d;
    }
    if (d*d==n)
        v[++k]=d;
    v[++k]=n;
    sort (v+1,v+k+1);
    reverse (v+1,v+k+1);
    v[k+1]=1;
    for (int i=1; i<=k+1; i++)
        fr[v[i]]=i;
    dp[0][k+1]=1;
    for (int i=0; i<k; i++)
    {
        for (int j=k+1; j>0; j--)
        {
            nr=v[j];
            while (fr.find (nr)!=fr.end ())
            {
                dp[i+1][fr[nr]]+=dp[i][j];
                nr=nr*v[i+1];
            }
        }
    }
    fout<<dp[k][1]<<"\n";
    i=k;
    while (n>1)
    {
        for (; i>0; i--)
        {
            if (n%v[i]==0)
            {
                if (dp[i][fr[n/v[i]]]>=nrc)
                {
                    n/=v[i];
                    fout<<v[i]<<" ";
                    break;
                }
                nrc-=dp[i][fr[n/v[i]]];
            }
        }
    }
    return 0;
}