Cod sursa(job #2777186)

Utilizator andreea_chivuAndreea Chivu andreea_chivu Data 22 septembrie 2021 15:59:19
Problema Pascal Scor 60
Compilator c-64 Status done
Runda Arhiva de probleme Marime 2.37 kb
#include <stdio.h>
#include <stdlib.h>

#define NMAX 5000000
int p2[NMAX + 1];
int p3[NMAX + 1];
int p5[NMAX + 1];

void puteri(int r, int pas, int p[]){
    int i, ci;
    for(i = pas; i <= r; i+=pas){
        ci = i;
        while(ci % pas == 0){
            p[i]++;
            ci /= pas;
        }
    }

    for(i = 1; i <= r; i++){
        p[i]+=p[i - 1];
    }
}

int main()
{
    FILE*fin,*fout;

    int r, d, divizibile, j, psus, pjos, ptot, psus2, pjos2, psus3, pjos3, ptot3, ptot2;

    fin = fopen("pascal.in", "r");
    fout = fopen("pascal.out", "w");

    fscanf(fin, "%d%d", &r, &d);

    if(d == 2){
        puteri(r, 2, p2);
        divizibile = 0;
        for(j = 0; j < r; j++){
            psus = p2[r] - p2[j];
            pjos = p2[r - j];
            ptot = psus - pjos;
            if(ptot > 0)
               divizibile++;
        }
        fprintf(fout, "%d", divizibile);
    }else if(d == 3){
        puteri(r, 3, p3);
        divizibile = 0;
        for(j = 0; j < r; j++){
            psus = p3[r] - p3[j];
            pjos = p3[r - j];
            ptot = psus - pjos;
            if(ptot > 0)
               divizibile++;
        }
        fprintf(fout, "%d", divizibile);
    }else if(d == 4){
        puteri(r, 2, p2);
        divizibile = 0;
        for(j = 0; j < r; j++){
            psus = p2[r] - p2[j];
            pjos = p2[r - j];
            ptot = psus - pjos;
            if(ptot > 1)
               divizibile++;
        }
        fprintf(fout, "%d", divizibile);
    }else if(d == 5){
        puteri(r, 5, p5);
        divizibile = 0;
        for(j = 0; j < r; j++){
            psus = p5[r] - p5[j];
            pjos = p5[r - j];
            ptot = psus - pjos;
            if(ptot > 0)
               divizibile++;
        }
        fprintf(fout, "%d", divizibile);
    }else if(d == 6){
        puteri(r, 2, p2);
        puteri(r, 3, p3);
        divizibile = 0;
        for(j = 0; j < r; j++){
            psus2 = p2[r] - p2[j];
            pjos2 = p2[r - j];
            ptot2 = psus2 - pjos2;
            psus3 = p3[r] - p3[j];
            pjos3 = p3[r - j];
            ptot3 = psus3 - pjos3;
            if(ptot2 > 0 && ptot3 > 0)
               divizibile++;
        }
        fprintf(fout, "%d", divizibile);
    }

    fclose(fin);
    fclose(fout);
    return 0;
}