Pagini recente » Cod sursa (job #1624236) | Cod sursa (job #1394159) | Cod sursa (job #759515) | Cod sursa (job #2144526) | Cod sursa (job #1733003)
#include <cstdio>
#define MOD 666019
#define MAXU 1000000
#define MAXS 39
long long val[MAXU+1], ans[MAXU+1], s[MAXS+1];
int u, next[MAXU+1], lista[MOD+1];
long long desc(long long n, int d){
long long a=(n<<21)+d;
int b=a%MOD;
int p=lista[b];
while((p)&&(val[p]!=a)) p=next[p];
if(p) return ans[p];
long long rez=1;
while((d*(long long)d<=n)&&(n%d!=0)) d++;
if(d*(long long)d<=n) rez=desc(n/d, d)+desc(n, d+1);
u++;
val[u]=a;
ans[u]=rez;
next[u]=lista[b];
lista[b]=u;
return rez;
}
int main(){
int k, i, d;
long long n;
FILE *fin, *fout;
fin=fopen("desc.in", "r");
fout=fopen("desc.out", "w");
fscanf(fin, "%lld%d", &n, &k);
fprintf(fout, "%lld\n", desc(n, 2));
d=2;
while((d*(long long)d<=n)&&(n%d!=0)) d++;
while(d*(long long)d<=n){
if(desc(n/d, d)<k){
k-=desc(n/d, d);
d++;
}else s[++s[0]]=d, n/=d;
while((d*(long long)d<=n)&&(n%d!=0)) d++;
}
s[++s[0]]=n;
for(i=1; i<=s[0]; i++) fprintf(fout, "%lld ", s[i]);
fclose(fin);
fclose(fout);
return 0;
}