Pagini recente » Cod sursa (job #363199) | Cod sursa (job #976299) | Cod sursa (job #1580471) | Cod sursa (job #1500650) | Cod sursa (job #1039511)
#include <fstream>
#include <algorithm>
#include <map>
using namespace std ;
map < long long ,int > HASH;
const char In[]="desc.in";
const char Out[]="desc.out";
long long n,dp[4100][4100] , v[4100];
int k, nr;
inline void Read()
{
ifstream f(In);
f >> n >> k;
f.close();
}
inline void Desc(const long long n)
{
long long i;
for(i = 1;1LL*i*i<n; ++i)
if(n%i==0)
{
v[++v[0]] = i;
v[++v[0]] = n/i;
}
if(1LL*i*i==n)
v[++v[0]] = i;
}
inline void Solve()
{
int i , j ,s;
nr = v[0];
sort(v+1,v+nr+1);
for(i = 1 ;i <= nr; ++i)
HASH[v[i]] = i;
for(i = 2;i <= nr;++i)
{
dp[i][i] = 1;
for(j = i-1; j > 1;--j)
{
dp[i][j] = dp[i][j+1];
if(v[i]%v[j]==0)
dp[i][j]+=dp[HASH[v[i]/v[j]]][j];
}
}
ofstream g(Out);
g<<dp[nr][2]<<"\n";
/*for(i=nr;i>1 ;--i)
{
g<<v[i]<<" : ";
for(j=2;j<=nr;++j)
g<<dp[i][j]<<" ";
g<<"\n";
}*/
int p = 2,ind , Last;
i = nr;
while(ind>0)
{
s = 0;
Last = 0;
for(j = p;j <= nr; ++j)
{
if(v[i]%v[j]==0)
{
if(i == j)
{
ind = -1;
s = 1;
}
else
{
ind = HASH[v[i]/v[j]];
s += dp[ind][j];
}
if(s==k)
{
g<<v[j]<<" ";
i = ind ;
p = j;
break;
}
if(s>k)
{
g<<v[j]<<" ";
s -= dp[ind][j];
k -= s;
i = ind;
p = j;
break ;
}
}
}
}
g<<"\n";
g.close();
}
int main()
{
Read();
Desc(n);
Solve();
return 0;
}