Cod sursa(job #571517)

Utilizator S7012MYPetru Trimbitas S7012MY Data 4 aprilie 2011 15:58:19
Problema Descompuneri Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <fstream>
#include <algorithm>
#define DN 3005
using namespace std;

int a[DN][DN],k,d[DN];
long long n;

int main()
{
    ifstream f("desc.in");
    ofstream g("desc.out");
    f>>n>>k;
    int p=0,i,j,r;
    d[0]=1;
    for(i=2; i*i<n; ++i) if(0==n%i) {
        d[++p]=i;
        d[++p]=n/i;
    }
    if(i*i==n) d[++p]=i;
    d[++p]=n;
    sort(d+1, d+(++p));
    for(i=1; i<p; ++i) a[0][i]=1;
    for(i=1; i<p; ++i) {
        r=0;
        for(j=p-1; 0<j; --j) {
            a[i][j]=a[i][j+1];
            if(0==d[i]%d[j]) {
                for(;d[r]<d[i]/d[j];++r);
                a[i][j]+=a[r][j];
            }
        }
    }
    g<<a[p-1][1]<<'\n';
    j=1;
    for(i=p-1; 0<i;) {
        r=p-1;
        for(;j<p; ++j) if(0==d[i]%d[j]) {
            for(;d[r]>d[i]/d[j];--r);
            if(a[r][j]<k) k-=a[r][j];
            else {
                g<<d[j]<<' ';
                i=r;
                break;
            }
        }
    }
    return 0;
}