Cod sursa(job #2206538)

Utilizator Andrei_CotorAndrei Cotor Andrei_Cotor Data 22 mai 2018 21:15:02
Problema Descompuneri Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include<fstream>
#include<algorithm>
using namespace std;
ifstream fi("desc.in");
ofstream fo("desc.out");
long long n,D[1005];
int nrd,k,i,j,ind,Dp[1005][1005],x,y;
int main()
{
    fi>>n>>k;
    for(i=2; 1LL*i*i<=n; i++)
    {
        if(n%i==0)
        {
            D[++nrd]=i;
            if(i!=n/i)
                D[++nrd]=n/i;
        }
    }
    D[0]=1;
    sort(D+1,D+nrd+1);
    D[++nrd]=n;
    for(i=1; i<=nrd; i++)
        Dp[0][i]=1;
    for(i=1; i<=nrd; i++)
    {
        ind=0;
        for(j=nrd; j>=1; j--)
        {
            Dp[i][j]=Dp[i][j+1];
            if(D[i]%D[j]==0)
            {
                while(D[ind+1]<=D[i]/D[j])
                    ind++;
                Dp[i][j]+=Dp[ind][j];
            }
        }
    }
    fo<<Dp[nrd][1]<<"\n";
    x=nrd;
    y=1;
    while(n>1)
    {
        while(k>Dp[x][y]-Dp[x][y+1])
        {
            k=k-(Dp[x][y]-Dp[x][y+1]);
            y++;
        }
        fo<<D[y]<<" ";
        n/=D[y];
        while(D[x]>n)
            x--;
    }
    fi.close();
    fo.close();
    return 0;
}