Pagini recente » Cod sursa (job #1973299) | Cod sursa (job #123502) | Cod sursa (job #1613132) | Cod sursa (job #3249282) | Cod sursa (job #778672)
Cod sursa(job #778672)
#include<fstream>
#include<algorithm>
#include<vector>
using namespace std;
ifstream f("desc.in");
ofstream g("desc.out");
long long n;
int i,j,imax;
int k,nrdiv,nrpoz,sqrtnr;
vector<long long> v;
int poz[1000005];
int complem,c;
long long produs;
int m[3005][3005];
int pozitie(long long val)
{
if(val==n)
return nrdiv;
if(val<imax)
return poz[(int)val];
complem=(int)(n/val);
return (nrdiv-poz[complem]);
}
int main()
{f>>n>>k;
nrpoz=0;
for(i=2; i*i<=n; i++)
if(n%i==0)
{nrdiv++; nrpoz++; v.push_back(i); poz[i]=nrpoz;
if(i*i!=n)
{nrdiv++; v.push_back(n/i);}
else
sqrtnr=1;
}
imax=i;
nrdiv++;
v.push_back(n);
v.push_back(0);
sort(v.begin(),v.end());
for(i=1; i<=nrdiv; i++)
m[i][i]=1;
for(i=2; i<=nrdiv; i++)
for(j=i-1; j>=1; j--)
{m[i][j]=m[i][j+1];
if(v[i]%v[j]==0)
{c=(long long)(v[i]/v[j]);
m[i][j]+=m[pozitie(c)][j];
}
}
/*for(i=1; i<=nrdiv; i++)
{for(j=1; j<=nrdiv; j++)
g<<m[i][j]<<" ";
g<<endl;} */
g<<m[nrdiv][1]<<endl;
i=nrdiv;
j=1;
produs=1;
while(produs!=n)
{if(m[i][j]-m[i][j+1]<k)
{k=k-m[i][j]+m[i][j+1];
j++;}
else
{
g<<v[j]<<" ";
produs*=v[j];
c=(long long)(v[i]/v[j]);
i=pozitie(c);}
}
f.close();
g.close();
return 0;}