Cod sursa(job #2640877)

Utilizator cyg_vladioanBirsan Vlad cyg_vladioan Data 8 august 2020 20:50:00
Problema Pascal Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <cstdio>
using namespace std;
const int NMAX = 5000000;
int p1[NMAX + 5] , p2[NMAX + 5];
void build(int p[] , int n , int d)
{
    int x , i , j;
    x = d;
    i = 1;
    while(x <= n)
    {
        j = 1;
        while(x * j <= n)
        {
            if(j % d != 0)
                p[x * j] = i;
            j ++;
        }
        i ++;
        x = x * d;
    }
    for(i = 1 ; i <= n ; i ++)
        p[i] = p[i] + p[i - 1];
}
int main()
{
    freopen("pascal.in" , "r" , stdin);
    freopen("pascal.out" , "w" , stdout);
    int n , d , i , x , j , nr;
    scanf("%d%d", &n , &d);
    if(d != 4 && d != 6)
    {
        build(p1 , n , d);
        nr = 0;
        for(i = 1 ; i <= n ; i ++)
            if(p1[n] - p1[i] - p1[n - i] > 0)
                nr ++;
        printf("%d\n" , nr);
    }
    else if(d == 4)
    {
        build(p1 , n , 2);
        nr = 0;
        for(i = 1 ; i <= n ; i ++)
            if(p1[n] - p1[i] - p1[n - i] > 1)
                nr ++;
        printf("%d\n" , nr);
    }
    else
    {
        build(p1 , n , 2);
        build(p2 , n , 3);
        nr = 0;
        for(i = 1 ; i <= n ; i ++)
            if(p1[n] - p1[i] - p1[n - i] > 0 && p2[n] - p2[i] - p2[n - i] > 0)
                nr ++;
        printf("%d\n" , nr);
    }
    return 0;
}