Cod sursa(job #1825663)

Utilizator bogdi1bogdan bancuta bogdi1 Data 9 decembrie 2016 15:46:30
Problema Pascal Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.8 kb
#include <cstdio>

using namespace std;
int nr1[5000005];
int nr2[5000005];
int nr3[5000005];
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);
        for(i=2; i<=r; i*=2){
            for(j=i; j<=r; j+=i)
                nr1[j]++;
        }
        for(i=3; i<=r; i*=3){
            for(j=i; j<=r; j+=i)
                nr2[j]++;
        }

        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;
}