Cod sursa(job #3192931)

Utilizator rastervcrastervc rastervc Data 13 ianuarie 2024 15:44:59
Problema Pascal Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.72 kb
#include <bits/stdc++.h>
#pragma GCC optimize ("fast-math", "unroll-loops")

using namespace std;

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

const int NMAX = 5e6;

int prec[3][NMAX + 5];
int prime[3];

int main()
{
    int n, d;
    in >> n >> d;

    int cnt = 0;
    if (d % 2 == 0) {
      prime[cnt++] = 2;
    }
    if (d % 3 == 0) {
      prime[cnt++] = 3;
    }
    if (d % 5 == 0) {
      prime[cnt++] = 5;
    }


    for (int i=1; i<=n; i++)
    {
        int x = i;
        for (int j=0; j<cnt; j++)
        {
            prec[j][i] = prec[j][i-1];
            while (x % prime[j] == 0)
                x /= prime[j], prec[j][i]++;
        }
    }

    int ans = 0;

    if (d == 2)
    {
        for (int i=1; i<=n; i++)
        {
            if (prec[0][n] - prec[0][i] - prec[0][n-i] > 0)
                ans++;
        }
        out << ans;
    }
    else if (d == 3)
    {
        for (int i=1; i<=n; i++)
        {
            if (prec[0][n] - prec[0][i] - prec[0][n-i])
                ans++;
        }
        out << ans;
    }
    else if (d == 5)
    {
        for (int i=1; i<=n; i++)
        {
            if (prec[0][n] - prec[0][i] - prec[0][n-i])
                ans++;
        }
        out << ans;
    }
    else if (d == 4)
    {
        for (int i=1; i<=n; i++)
        {
            if (prec[0][n] - prec[0][i] - prec[0][n-i] > 1)
                ans++;
        }
        out << ans;
    }
    else
    {
        for (int i=1; i<=n; i++)
        {
            if (prec[0][n] - prec[0][i] - prec[0][n-i] && prec[1][n] - prec[1][i] - prec[1][n-i])
                ans++;
        }
        out << ans;
    }

    return 0;
}