Cod sursa(job #1006786)

Utilizator misinoonisim necula misino Data 7 octombrie 2013 19:19:33
Problema Descompuneri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include<fstream>
#include<map>
#include<algorithm>
#define MOD 10007
using namespace std;
ifstream f("desc.in");
ofstream g("desc.out");
int k,i,nr,j,d[3010][3010];
long long n,v[3010];
map<long long ,int>m;
inline void afis(int x,int y,int z)
{
    if(x==1)
    return ;
    while(d[x][z]-d[x][z+1]<y)
    {
        y-=(d[x][z]-d[x][z+1]);
        ++z;
    }
    g<<v[z]<<' ';
    afis(m[v[x]/v[z]],y,z);
}
int main()
{
    f>>n>>k;
    for(i=1;1LL*i*i<=n;++i)
    if(n%i==0)
    {
        v[++nr]=i;
        if(1LL*i*i!=n)
        v[++nr]=n/i;
    }
    sort(v+1,v+nr+1);
    for(i=1;i<=nr;++i)
    m[v[i]]=i;
    for(j=nr;j;--j)
    {
        d[j][j]=1;
        for(i=j+1;i<=nr;++i)
        {
            d[i][j]=d[i][j+1];
            if(v[i]%v[j]==0&&v[i]/v[j]>=v[j])
            d[i][j]+=d[m[v[i]/v[j]]][j];
        }
    }
    g<<d[nr][2]<<'\n';

    afis(nr,k,2);
    return 0;
}