Pagini recente » Cod sursa (job #2427377) | Cod sursa (job #1918962) | Cod sursa (job #2527335) | Cod sursa (job #403273) | Cod sursa (job #778655)
Cod sursa(job #778655)
#include<fstream>
#include<cmath>
#include<algorithm>
#include<vector>
using namespace std;
vector<long long> v;
vector<long long>::iterator jt;
long long n,i;
int k,sqrtn,nrdiv,j,u,t;
int m[3001][3001];
ifstream f("desc.in");
ofstream g("desc.out");
int main()
{f>>n>>k;
sqrtn=(int)sqrt((double)n);
for(i=2; i<sqrtn; i++)
{if(n%i==0)
{v.push_back(i);
v.push_back(n/i);}
}
if(n%sqrtn==0)
{v.push_back(sqrtn);
if(int(n/sqrtn)!=sqrtn)
v.push_back(n/sqrtn);
}
v.push_back(n);
nrdiv=v.size();
sort(v.begin(),v.end());
/*for(j=0; j<nrdiv; j++)
g<<v[j]<<" "; */
m[0][0]=1;
for(u=1; u<nrdiv; u++)
{m[u][u]=1;
for(j=u-1; j>=0; j--)
{m[u][j]=m[u][j+1];
if(v[u]%v[j]==0)
{t=0;
while(v[t]<v[u]/v[j]) t++;
m[u][j]+=m[t][j];}
}
}
/*for(u=0; u<nrdiv; u++)
{for(j=0; j<nrdiv; j++)
g<<m[u][j]<<" ";
g<<endl;} */
g<<m[nrdiv-1][0]<<endl;
u=nrdiv-1;
j=0;
while(n>1)
{
if(m[u][j]-m[u][j+1]<k)
{k=k-m[u][j]+m[u][j+1];
j++;}
else
{g<<v[j]<<" ";
n=n/v[j];
if(n!=1)
while(v[u]>n) u--;
}
}
f.close();
g.close();
}