Cod sursa(job #520575)

Utilizator CS-meStanca Marian Ciprian CS-me Data 9 ianuarie 2011 16:11:50
Problema Pascal Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include<stdio.h>
FILE *fin, *fout;
int r,d,i,j,f[4][5000000],dd[2][10],nr,nr1,k,ok;

int div(int x, int d){
int nr;
    nr=0;
    while(x%d==0){
        nr++;
        x/=d;
    }

return nr;
}



int main(){

    fin=fopen("pascal.in","r");
    fout=fopen("pascal.out","w");

    fscanf(fin,"%d %d",&r,&d);

    k=2;
    while(k*k<=d){
        nr=0;
        while(d%k==0){
            d/=k;
            ++nr;
        }
        if(nr!=0){
            dd[0][0]++;
            dd[0][ dd[0][0] ]=k;
            dd[1][ dd[0][0] ]=nr;
        }
        ++k;
    }

if(d>1){
    dd[0][0]++;
    dd[0][ dd[0][0] ]=d;
    dd[1][ dd[0][0] ]=1;
}

    for(i=1;i<=r;i++){
        for(j=1;j<=dd[0][0];j++){
            f[j][i]=f[j][i-1]+div(i,dd[0][j]);
        }
    }

    int nr1=0;

    for(i=1;i<=r;i++){
        ok=1;

        for(j=1;j<=dd[0][0];j++){
            nr=f[j][r]-f[j][i]-f[j][r-i];

            if(nr<dd[1][j]){
                ok=0;
                break;
            }
        }

        if(ok==1){
            nr1++;
        }
    }


    fprintf(fout,"%d",nr1);




    fclose(fout);
    fclose(fin);

return 0;
}