Cod sursa(job #1825654)

Utilizator bogdi1bogdan bancuta bogdi1 Data 9 decembrie 2016 15:41:39
Problema Pascal Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.88 kb
#include <cstdio>

using namespace std;
short int nr1[5000000];
short int nr2[5000000];
short int nr3[5000000];
int main()
{   freopen("pascal.in", "r",stdin);
    freopen("pascal.out", "w",stdout);
    int r,d,i,j,x2,x3,x5,nr;
    scanf("%d%d", &r, &d);
    if(d%2==0){
        for(i=2; i<=r; i*=2){
            for(j=i; j<=r; j+=i)
                nr1[j]++;
        }

    }
    if(d%3==0){
        for(i=3; i<=r; i*=3){
            for(j=i; j<=r; j+=i)
                nr2[j]++;
        }

     }
    if(d%5==0){
        for(i=5; i<=r; i*=5){
            for(j=i; j<=r; j+=i)
                nr3[j]++;
        }
    }
    for(i=1; i<(r+1)/2; i++){
        x2+=nr1[r-i+1]-nr1[i];
        x3+=nr2[r-i+1]-nr2[i];
        x5+=nr3[r-i+1]-nr3[i];
        switch(d){
            case 2:
                if(x2>0)
                    nr++;
                break;
            case 3:
                if(x3>0)
                    nr++;
                break;
            case 4:
                if(x2>1)
                    nr++;
                break;
            case 5:
                if(x5>0)
                    nr++;
                break;
            case 6:
                if(x2>0 && x3>0)
                    nr++;
                break;
        }
    }
    nr*=2;
    if(r%2==0){
        x2+=nr1[r-i+1]-nr1[i];
        x3+=nr2[r-i+1]-nr2[i];
        x5+=nr3[r-i+1]-nr3[i];
        switch(d){
            case 2:
                if(x2>0)
                    nr++;
                break;
            case 3:
                if(x3>0)
                    nr++;
                break;
            case 4:
                if(x2>1)
                    nr++;
                break;
            case 5:
                if(x5>0)
                    nr++;
                break;
            case 6:
                if(x2>0 && x3>0)
                    nr++;
                break;
        }
    }
    printf("%d", nr);
    return 0;
}