Cod sursa(job #778591)

Utilizator ionut_blesneagIonut Blesneag ionut_blesneag Data 15 august 2012 01:26:17
Problema Descompuneri Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;


long long n;
long long i,j;
int t;
int k,nrdiv;
vector<long long> v;
long long produs;
int m[3005][3005];


int main()
{freopen("desc.in","r",stdin);
freopen("desc.out","w",stdout);
scanf("%d %d",&n,&k);

for(i=2; i*i<=n; i++)
  if(n%i==0)
  {nrdiv++;  v.push_back(i);   
   if(i*i!=n)
      {nrdiv++;  v.push_back(n/i);} 
   }     
nrdiv++;  
v.push_back(n);
v.push_back(0);
sort(v.begin(),v.end());    

  
m[1][1]=1;    
for(i=2; i<=nrdiv; i++)
  {m[i][i]=1;
   for(j=i-1; j>=1; j--)
    {m[i][j]=m[i][j+1];
     if(v[i]%v[j]==0)
     {t=1;
      while(v[t]<v[i]/v[j])   t++;
      m[i][j]+=m[t][j];
      }
    }
  }        
  
printf("%d\n",m[nrdiv][1]);

i=nrdiv;
j=1;

while(n>1)
{if(m[i][j]-m[i][j+1]<k)
   {k=k-m[i][j]+m[i][j+1];
    j++;}
 else
   {
    printf("%d ",v[j]);
    n=n/v[j];
    if(n!=1)
       while(v[i]>n)  i--;
   }     
}
return 0;}