Cod sursa(job #2097507)

Utilizator circeanubogdanCirceanu Bogdan circeanubogdan Data 31 decembrie 2017 17:33:55
Problema Pascal Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.9 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], cnt;
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; 1LL * j * i <= n; ++ j){
                doi[i * j] = doi[i] + doi[j];
                viz[i * j] = 1;
            }
            viz[i] = 1;
        }
        viz[i] = 0;
       // ++ cnt;
    }
    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;
       // ++ cnt;
    }
    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;
//++ cnt;
    }
    DOI = 0;
    TREI = 0;
    CINCI = 0;
    int s = 0;
    for(int i = 0; i <= n / 2; ++ 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];
        //++ cnt;
    }
    s *= 2;
    if(!(n % 2))
        -- s;
    g<<s;//<<" "<<cnt;
    return 0;
}