Pagini recente » Cod sursa (job #2890569) | Cod sursa (job #1375563) | Cod sursa (job #412877) | Cod sursa (job #1440419) | Cod sursa (job #481090)
Cod sursa(job #481090)
#include <stdio.h>
#include <fstream>
#include <math.h>
#define LL long long
#define Dmax 200
using namespace std;
ifstream fin("desc.in");
ofstream fout("desc.out");
int A[Dmax][Dmax];
LL Div[Dmax];
int K;
LL N;
int main(){
int i,j,st,lim,minim; LL cine;
fin>>N>>K;
for(i=1, lim=(int)sqrt((double)N); i<=lim; ++i)
if( N % i == 0 ) Div[++Div[0]]=i;
for(i=Div[0];i>=1;--i)
if( N/Div[i] != Div[i] ) Div[++Div[0]]=N/Div[i];
for(i=2;i<=Div[0];++i){
st=1; A[i][i]=1;
for(j=i-1; j>1; --j){
A[i][j]=A[i][j+1];
if( Div[i] % Div[j] == 0 ){
while( Div[st] != Div[i]/Div[j] ) ++st;
A[i][j] += A[st][j];
}
}
}
for(i=1;i<=Div[0];++i) A[1][i]=1;
fout<<A[Div[0]][2]<<"\n";
cine=Div[Div[0]]; // Div[cine]=N
minim=2;
while( cine!=1 ){
st=Div[0];
for(j=minim;j<=Div[0];++j)
if( cine % Div[j] == 0 ){
while( Div[st] != cine/Div[j] ) st--;
if( A[st][j] < K ) K-=A[st][j];
else{
fout<<Div[j]<<" ";
cine/=Div[j];
minim=j;
break;
}
}
}
fin.close(); fout.close();
return 0;
}