Pagini recente » Cod sursa (job #330236) | Cod sursa (job #687451) | Cod sursa (job #335270) | Cod sursa (job #411910) | Cod sursa (job #2739020)
#include <fstream>
#include<unordered_map>
#include<algorithm>
using namespace std;
ifstream fin("desc.in");
ofstream fout("desc.out");
long long n,divv[5000];
int k,dp[5000][5000],nr,i;
unordered_map<long long,int>h;
int main()
{
fin>>n>>k;
for(i=1;i*i<n;i++)
{
if(n%i==0)
{
divv[++nr]=i;
divv[++nr]=n/i;
}
}
if(i*i==n)
divv[++nr]=i;
sort(divv+1,divv+nr+1);
for(int i=1;i<=nr;i++)
{
h[divv[i]]=i;
dp[1][i]=1;
}
for(int i=2;i<=nr;i++)
{
dp[i][i]=1;
for(int j=i-1;j>=2;j--)
{
dp[i][j]=dp[i][j+1];
if(divv[i]%divv[j]==0)
{
long long c=divv[i]/divv[j];
dp[i][j]+=dp[h[c]][j];
}
}
dp[i][1]=dp[i][2];
}
fout<<dp[nr][1]<<"\n";
int i=2;
while(n>1)
{
while(i<=nr)
{
if(n%divv[i]==0)
{
long long c=n/divv[i];
if(dp[h[c]][i]>=k)
{
fout<<divv[i]<<" ";
n=c;
break;
}
else
{
k-=dp[h[c]][i];
i++;
}
}
else
i++;
}
}
return 0;
}