Cod sursa(job #1010281)

Utilizator RaduGabriel2012Dinu Radu RaduGabriel2012 Data 14 octombrie 2013 17:52:52
Problema Descompuneri Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("desc.in");
ofstream g("desc.out");
long long d[3005];
int p[3005][3005],s[3005][3005],k=0,lex;
long long n;

void Divs()
{ int i;
   for(i=2;(1LL*i*i)<=(1LL*n);i++)
    if (n%i==0)
    { k++;
      d[k]=i;
      if (1LL*(n/i)>i) {k++; d[k]=1LL*n/i;}
    }
 sort(d+1,d+k+1);
  k++; d[k]=n;
   //for(i=1;i<=)
}
void Dinamic()
{ int i,j,pos,t,sol=0;
   p[1][1]=1;
    for(j=1;j<=k;j++)
     s[1][j]=1;
    for(i=2;i<=k;i++)
     { p[i][i]=1;
         pos=i; s[i][0]=0;

        for(j=1;j<i;j++)
         if (d[i]%d[j]==0)
         { while(1LL*d[pos]!=(d[i]/d[j]) && pos) pos--;
             p[i][j]=s[pos][j];
             s[i][j]=s[i][j-1]+p[i][j];
         }
         else s[i][j]=s[i][j-1];

       s[i][i]=s[i][i-1]+1;

        for(j=i+1;j<=k;j++)
         s[i][j]=s[i][j-1];
     }
 /*for(i=1;i<=k;i++)
  sol+=p[k][i];*/

g<<s[k][k];
}
int main()
{ f>>n>>lex;
    Divs();
    Dinamic();
    return 0;
}