Cod sursa(job #1893411)

Utilizator iulianrotaruRotaru Gheorghe-Iulian iulianrotaru Data 25 februarie 2017 17:49:13
Problema Descompuneri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f("desc.in");
ofstream g("desc.out");
int k,i,j,N,dp[3000][3000];
long long n,v[3000];
map<long long,int> M;
void afis(int N,int x,int d)
{
    if(N==1) return;
    for(;dp[N][d]-dp[N][d+1]<x;++d) x-=(dp[N][d]-dp[N][d+1]);
    g<<v[d]<<' ';
    afis(M[v[N]/v[d]],x,d);
}
int main()
{
    f>>n>>k;
    for(i=1;1LL*i*i<n;++i)
        if(n%i==0) v[++N]=i,v[++N]=n/i;
    if(1LL*i*i==n) v[++N]=i;
    sort(v+1,v+N+1);
    for(i=1;i<=N;++i) M[v[i]]=i;
    for(j=N;j;--j)
    {
        dp[j][j]=1;
        for(i=j+1;i<=N;++i)
        {
            dp[i][j]=dp[i][j+1];
            if(v[i]%v[j]==0&&v[i]/v[j]>=v[j]) dp[i][j]+=dp[M[v[i]/v[j]]][j];
        }
    }
    g<<dp[N][2]<<'\n';
    afis(N,k,2);
    return 0;
}