Cod sursa(job #1969720)

Utilizator georgerapeanuRapeanu George georgerapeanu Data 18 aprilie 2017 16:53:51
Problema Pascal Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <cstdio>
#include <algorithm>
using namespace std;
FILE *f=fopen("pascal.in","r");
FILE *g=fopen("pascal.out","w");
int F[3];
int E[3];
int D;
int R;
void desc(int D)
{
    for(int j=2;j*j<=D;j++)
    {
        if(D%j==0)
        {
            F[0]++;
            F[F[0]]=j;
            while(D%j==0)
            {
                D/=j;
                E[F[0]]++;
            }
        }
    }
    if(D!=1||(D==1&&F[0]==0))
    {
        F[0]++;F[F[0]]=D;E[F[0]]=1;
    }
}
int cateori(int nr)
{
    int r[3]={0,0,0},rez=(1<<30);
    for(int i=1;i<=F[0];i++)
    {
        int p1=F[i];
        while(p1<=nr)
        {
            r[i]+=nr/p1;
            p1*=F[i];
        }
        rez=min(rez,r[i]/E[i]);
    }
    return rez;
}
int main()
{
    fscanf(f,"%d %d",&R,&D);
    desc(D);
    int rez=0;
    for(int i=0;i<=R;i++)
    {
        if(cateori(R)-cateori(i)-cateori(R-i)>0)
            rez++;
    }
    fprintf(g,"%d",rez);
    fclose(f);
    fclose(g);
    return 0;
}