Cod sursa(job #378119)

Utilizator perticas_catalinperticas catalin perticas_catalin Data 27 decembrie 2009 16:31:01
Problema Pascal Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include<iostream>
#include<string>

using namespace std;

#define FOR(i,a,b)for(int i=(a);i<=(b);++i)
#define inf 1000000000

int R,D,ori[5000005][3];

int main()
{
    int diviz[3],cat[3],dim=-1,ans=0;
    
    freopen("pascal.in","r",stdin);
    freopen("pascal.out","w",stdout);
    
    scanf("%d %d",&R,&D);
    
    int div=2;
    
    while(D!=1)
    {
         if(D%div==0)
         {
           diviz[++dim]=div;
           cat[dim]=0;
           
           while(D%div==0)
           {
             ++cat[dim];
             D/=div;
           }
         }        
         ++div;
    }
    
    FOR(j,0,dim)
      ori[0][j]=0;
    
    FOR(i,1,R)
    {
      int nr=i;
       
      FOR(j,0,dim)
        ori[i][j]=ori[i-1][j];
      
      FOR(j,0,dim)
      {
        int div=diviz[j];
        while(nr%div==0)
        {
          ++ori[i][j];
          nr/=div;
        }
      }  
        
    }
    
    FOR(i,0,R)
    {
      int ad=inf;   
      
      FOR(j,0,dim)
        ad=min(ad,(ori[R][j]-ori[i][j]-ori[R-i][j])/cat[j]);
      
      if(ad) ++ans;  
    }
    
    printf("%d",ans);
    
    return 0; 
}