Cod sursa(job #1882960)

Utilizator Athena99Anghel Anca Athena99 Data 17 februarie 2017 17:04:43
Problema Descompuneri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <algorithm>
#include <fstream>

using namespace std;

ifstream fin("desc.in");
ofstream fout("desc.out");

typedef long long i64;

const int divmax= 6730;

i64 v[divmax+1];
int d[divmax+1][divmax+1];

int main(  ) {
    i64 n, nr= 1;
    int k, nd= 0;
    fin>>n>>k;
    for ( int i= 2; (i64)i*i<=n; ++i ) {
        if ( n%i==0 ) {
            v[++nd]= i;
            if ( (i64)i*i!=n ) {
                v[++nd]= n/i;
            }
        }
    }
    v[++nd]= n;
    sort( v+1, v+nd+1 );

    for ( int i= 1; i<=nd; ++i ) {
        d[i][i]= 1;
        for ( int j= i-1, l= 1; j>=1; --j ) {
            d[i][j]= d[i][j+1];
            if ( v[i]%v[j]==0 ) {
                for ( i64 aux= v[i]/v[j]; aux>v[l]; ++l ) ;
                d[i][j]+= d[l][j];
            }
        }
    }

    fout<<d[nd][1]<<"\n";
    for ( int i= nd, j= 1; nr<n; ) {
        for ( ; d[i][j]-d[i][j+1]<k; k= k-(d[i][j]-d[i][j+1]), ++j ) ;
        fout<<v[j]<<" ";
        nr*= v[j];

        for ( i64 aux= v[i]/v[j]; aux<v[i]; --i ) ;
    }
    fout<<"\n";

    return 0;
}