Cod sursa(job #1825612)

Utilizator borscalinCalin-Stefan Georgescu borscalin Data 9 decembrie 2016 14:56:57
Problema Pascal Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.42 kb
#include <cstdio>
#define RMAX 5000000

using namespace std;

int puteri2[RMAX + 1],puteri3[RMAX + 1],puteri5[RMAX + 1];

int main() {
    freopen("pascal.in","r",stdin);
    freopen("pascal.out","w",stdout);
    int r,d,i,nr = 0,p,x2,x3,x5;
    scanf("%d%d",&r,&d);
    for (p=2; p<=r; p*=2)
        for (i=p; i<=r; i+=p)
            puteri2[i]++;
    for (p=3; p<=r; p*=3)
        for (i=p; i<=r; i+=p)
            puteri3[i]++;
    for (p=5; p<=r; p*=5)
        for (i=p; i<=r; i+=p)
            puteri5[i]++;
    x2 = x3 = x5 = 0;
    for (i=1; i<r/2; i++) {
        x2 += puteri2[r - i + 1] - puteri2[i];
        x3 += puteri3[r - i + 1] - puteri3[i];
        x5 += puteri5[r - i + 1] - puteri5[i];
        switch (d) {
            case 2 : nr += (x2 > 0); break;
            case 3 : nr += (x3 > 0); break;
            case 4 : nr += (x2 > 1); break;
            case 5 : nr += (x5 > 0); break;
            case 6 : nr += (x2 > 0 && x3 > 0); break;
        }
    }
    nr *= 2;
    if (r % 2 == 0) {
        x2 += puteri2[r - i + 1] - puteri2[i];
        x3 += puteri3[r - i + 1] - puteri3[i];
        x5 += puteri5[r - i + 1] - puteri5[i];
        switch (d) {
            case 2 : nr += (x2 > 0); break;
            case 3 : nr += (x3 > 0); break;
            case 4 : nr += (x2 > 1); break;
            case 5 : nr += (x5 > 0); break;
            case 6 : nr += (x2 > 0 && x3 > 0); break;
        }
    }
    printf("%d",nr);
    return 0;
}