Cod sursa(job #1368457)

Utilizator pepsiM4A1Ozturk Arif pepsiM4A1 Data 2 martie 2015 17:39:45
Problema Pascal Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <stdio.h>
int r,d;
int cate[5000001],cate2[5000001],cate3[5000001];
int minim(int a,int b)
{
    if(a>b) return b;
    return a;
}
int main()
{
    freopen ("pascal.in","r",stdin);
    freopen ("pascal.out","w",stdout);
    scanf("%d%d",&r,&d);
    if(d==6)
    {
        for(int i=3;i<=r;i*=3)
        {
            for(int j=1;j<=r/i;j++) cate3[i*j]++;
        }
        for(int i=2;i<=r;i*=2)
        {
            for(int j=1;j<=r/i;j++) cate2[i*j]++;
        }
        for(int i=6;i<=r;i*=6)
        {
            for(int j=1;j<=r/i;j++) cate[i*j]++;
            cate2[i]--;
            cate3[i]--;
        }
        for(int i=2;i<=r;i++)
        {
            cate2[i]+=cate2[i-1];
            cate[i]+=cate[i-1];
            cate3[i]+=cate3[i-1];
        }
        int counter=0;
        //printf("%d %d %d\n",cate2[r],cate3[r],cate[r]);
        for(int j=1;j<=r;j++)
        {
          //  printf("%d %d %d\n",cate2[r-j]+cate2[j],cate3[r-j]+cate3[j],cate[r-j]+cate[j]);
            if((cate[r]-cate[r-j]-cate[j])+minim(cate3[r]-cate3[r-j]-cate3[j],cate2[r]-cate2[r-j]-cate2[j])>0) counter++;
        }
        printf("%d\n",counter);
    }
}