Cod sursa(job #2097503)

Utilizator circeanubogdanCirceanu Bogdan circeanubogdan Data 31 decembrie 2017 17:28:04
Problema Pascal Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.76 kb
#include <fstream>
#define DIM 5000002

using namespace std;

ifstream f("pascal.in");
ofstream g("pascal.out");

int n, d, DOI, TREI, PATRU, CINCI, SASE, doi[DIM], trei[DIM], cinci[DIM];
bool viz[DIM];

int main()
{
    f>>n>>d;
    doi[2] = 1;
    trei[3] = 1;
    cinci[5] = 1;
    for(int i = 2; 1LL * i * i <= n; ++ i){
        int nr = i;
        if(!viz[i]){
            for(int j = i; j * i <= n; ++ j){
                doi[i * j] = doi[i] + doi[j];
                viz[i * j] = 1;
            }
            viz[i] = 1;
        }
        viz[i] = 0;
    }
    for(int i = 2; 1LL * i * i <= n; ++ i){
        int nr = i;
        if(!viz[i]){
            for(int j = i; 1LL * j * i <= n; ++ j){
                trei[i * j] = trei[i] + trei[j];
                viz[i * j] = 1;
            }
            viz[i] = 1;
        }
        viz[i] = 0;
    }
    for(int i = 2; 1LL * i * i <= n; ++ i){
        int nr = i;
        if(!viz[i]){
            for(int j = i; 1LL * j * i <= n; ++ j){
                cinci[i * j] = cinci[i] + cinci[j];
                viz[i * j] = 1;
            }
            viz[i] = 1;
        }
        viz[i] = 0;
    }
    DOI = 0;
    TREI = 0;
    CINCI = 0;
    int s = 0;
    for(int i = 0; i <= n; ++ i){
        switch (d){
            case 2: if(DOI > 0)   ++ s; break;
            case 3: if(TREI > 0)  ++ s; break;
            case 4: if(DOI > 1)   ++ s; break;
            case 5: if(CINCI > 0) ++ s; break;
            case 6: if(DOI > 0 && TREI > 0) ++ s; break;
        }

        DOI -= doi[i + 1];
        TREI -= trei[i + 1];
        CINCI -= cinci[i + 1];

        DOI += doi[n - i];
        TREI += trei[n - i];
        CINCI += cinci[n - i];
    }

    g<<s;
    return 0;
}