Pagini recente » Cod sursa (job #1926415) | Cod sursa (job #2901406) | Cod sursa (job #2293198) | Cod sursa (job #409658) | Cod sursa (job #693065)
Cod sursa(job #693065)
#include<stdio.h>
#include<algorithm>
using namespace std;
FILE*f=fopen("desc.in","r");
FILE*g=fopen("desc.out","w");
int K,i,j,d;
int D[3005][3005];
long long Div[3005];
long long N;
int main () {
fscanf(f,"%lld %d",&N,&K);
for ( i = 1 ; 1LL * i * i <= N ; ++i ){
if ( !(N % i) ){
Div[++d] = i;
if ( i != N/i ){
Div[++d] = N / i;
}
}
}
sort(Div+1,Div+d+1);
for ( i = 1 ; i <= d ; ++i ){
D[1][i] = 1;
}
for ( i = 2 ; i <= d ; ++i ){
for ( j = d ; j >= 1 ; --j ){
int p = 1;
if ( j < i ){
if ( !(Div[i] % Div[j]) ){
long long searched = Div[i] / Div[j];
while ( p <= d && searched != Div[p] ) ++p;
D[i][j] = D[i][j+1] + D[p][j];
}
else{
D[i][j] = D[i][j+1];
}
}
else{
if ( j == i ){
D[i][j] = D[i][j+1] + 1;
}
else{
D[i][j] = D[i][j+1];
}
}
}
}
fprintf(g,"%d\n",D[d][1]);
/*long long P = N; int maxd = 2; int p = d;
while ( P > 1 ){
while ( p > 0 && P != Div[p] ) --p;
for ( i = maxd ; i <= d ; ++i ){
if ( !(P % Div[i]) ){
if ( D[p][i] - D[p][i+1] < K ){
K -= D[p][i] - D[p][i+1];
}
else{
fprintf(g,"%lld ",Div[i]);
P /= Div[i]; maxd = i;
break ;
}
}
}
}
fprintf(g,"\n");
*/
fclose(f);
fclose(g);
return 0;
}