Pagini recente » Cod sursa (job #2516566) | Cod sursa (job #1789744) | Cod sursa (job #1631750) | Cod sursa (job #1283) | Cod sursa (job #164766)
Cod sursa(job #164766)
//#include <cstdio>
#include <fstream>
#include <vector>
//#include <algorithm>
# define input "desc.in"
# define output "desc.out"
using namespace std;
# define max 5001
long long a[max],b[max];
long long i,j,n,nr,k,d,c,p;
vector <vector <long long> > f;
int main()
{
ifstream fin ( input );
ofstream fout ( output );
fin >> n >> p;
f.resize(max);
for(i=2;i*i<=n;i++)
if(n%i == 0)
{
a[++d] = i;
b[d] = n/i;
}
i=d;
if(a[d] * a[d] == n) i--;
for(;i;i--)
a[++d] = b[i];
a[++d] = n;
f[0].resize(d+2);
for(i=1;i<=d;i++)
f[0][i]=1;
a[0] = 1;
for(i=1;i<=d;i++)
{
f[i].resize(i+2);
k=0;
for(j=i;j;j--)
{
f[i][j] = f[i][j+1];
if(a[i] % a[j] == 0)
{
c = a[i]/a[j];
while(c != a[k]) k++;
if(!k)
f[i][j] += f[k][j];
else
if(k >= j)
f[i][j] += f[k][j];
}
}
}
fout << f[d][1];
int pos = 1;
nr = 0;
while(n!=1)
{
if(n%a[pos] == 0)
{
c = n/a[pos];
k = 0;
while(a[k] != c) k++;
if(pos <= k || k == 0)
if(f[k][pos] < p)
p-=f[k][pos],pos++;
else
{
b[++nr] = a[pos];
n/=a[pos];
}
else
pos++;
}
else
pos++;
}
fout << "\n";
for ( i=1;i<=nr;i++)
fout << b[i] << " ";
return 0;
}