Cod sursa(job #1368450)

Utilizator pepsiM4A1Ozturk Arif pepsiM4A1 Data 2 martie 2015 17:37:37
Problema Pascal Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.67 kb
#include <stdio.h>
#define MAXL 5000008
int minim(int a,int b)
{
    if(a>b) return b;
    return a;
}
int cate[MAXL];
//long long tri[101][101];
int main()
{
    freopen ("pascal.in","r",stdin);
    freopen ("pascal.out","w",stdout);
    //tri[0][0]=1;
    int r,d;
    scanf("%d%d",&r,&d);
    /**for(int i=1;i<=100;i++)
    {
        tri[i][0]=1;
        for(int j=1;j<=i;j++)
        {
            tri[i][j]=tri[i-1][j]+tri[i-1][j-1];
            tri[i][j]%=d;
        }
    }
    long long int ct2=0;
    for(int i=0;i<=r;i++)
    {
        if(tri[r][i]==0)
        {
            ct2++;
        }
    }**/
    bool as=0;
    long long counter=0;
    if(d==6)
    {
        d=3;
        as=1;
    }
    //printf("\n");
    if(d!=4)
    {
        for(int i=d;i<=5000000;i*=d)
        {
            for(int j=1;j<=5000000/i;j++)
            {
             //   if(i*j>r) break;
                cate[i*j]++;
            }
        }
    }
    else
    {
        for(int i=2;i<=5000000;i*=2)
        {
            for(int j=1;j<=5000000/i;j++) cate[i*j]++;
        }
    }
  //  for(int i=1;i<=r;i++) printf("%d ",cate[i]);
 //   printf("\n");
    for(int i=2;i<=5000000;i++)
    {
        cate[i]+=cate[i-1];
    }
    if(d!=4&&d!=6)for(int j=1;j<=r;j++)
    {
        if(cate[r]-cate[r-j]-cate[j]>0)
        {
                //printf("%d ",j);
            counter++;
        }
    }
    else if(d==4)
    {
        cate[r]/=2;
        for(int j=1;j<=r;j++)
        {
            if(cate[r]-((cate[r-j]+cate[j])/2)>0) counter++;
        }
        //counter--;
    }
    else
    {

    }
    printf("%lld\n",counter);
}