Cod sursa(job #1823226)

Utilizator andra1782Andra Alazaroaie andra1782 Data 6 decembrie 2016 01:41:46
Problema Pascal Scor 50
Compilator c Status done
Runda Arhiva de probleme Marime 1.85 kb
#include <stdio.h>
int v[3]={2,3,5},api[3],apj[3],apij[3];
int main(){
    FILE *fin=fopen("pascal.in","r");
    FILE *fout=fopen("pascal.out","w");
    int r,d,nr,i,j,c;

    fscanf(fin,"%d%d",&r,&d);
    nr=0;
    for(i=0; i<3; i++){
        c=v[i];
        while(c<=r){
            api[i]+=r/c;
            c*=v[i];
        }
        apij[i]=api[i];
    }
    for(i=1; i<r/2+r%2; i++){
        for(j=0; j<3; j++){
            apij[j]=apj[j]=0;
            c=v[j];
            while(c<=r-i){
                apij[j]+=(r-i)/c;
                c*=v[j];
            }
            c=v[j];
            while(c<=i){
                apj[j]+=i/c;
                c*=v[j];
            }
        }
        switch(d){
            case 2: if(api[0]-apij[0]-apj[0]>0) nr++; break;
            case 3: if(api[1]-apij[1]-apj[1]>0) nr++; break;
            case 5: if(api[2]-apij[2]-apj[2]>0) nr++; break;
            case 4: if(api[0]-apij[0]-apj[0]>1) nr++; break;
            case 6: if(api[0]-apij[0]-apj[0]>0 && api[1]-apij[1]-apj[1]>0) nr++; break;
        }
    }
    nr*=2;
    if(r%2==0){
        for(j=0; j<3; j++){
            apij[j]=apj[j]=0;
            c=v[j];
            while(c<=r-i){
                apij[j]+=(r-i)/c;
                c*=v[j];
            }
            c=v[j];
            while(c<=i){
                apj[j]+=i/c;
                c*=v[j];
            }
        }
        switch(d){
            case 2: if(api[0]-apij[0]-apj[0]>0) nr++; break;
            case 3: if(api[1]-apij[1]-apj[1]>0) nr++; break;
            case 5: if(api[2]-apij[2]-apj[2]>0) nr++; break;
            case 4: if(api[0]-apij[0]-apj[0]>1) nr++; break;
            case 6: if(api[0]-apij[0]-apj[0]>0 && api[1]-apij[1]-apj[1]>0) nr++; break;
        }
    }
    fprintf(fout,"%d\n",nr);
    fclose(fin);
    fclose(fout);
    return 0;
}