Cod sursa(job #3339031)

Utilizator parus_majorParus Major parus_major Data 5 februarie 2026 20:30:47
Problema Pascal Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.49 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
#include <climits>

using namespace std;

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

const int MAXN = 5000002;

int N, D, ans;
int fact[MAXN], fact2[MAXN];

static inline void compute_fact(int prime, int fact[]) {
    for (int i = prime; i <= N; i *= prime) {
        for (int j = i; j <= N; j += i) {
            fact[j]++;
        }
    }
    for (int i = 1; i <= N; ++i) fact[i] += fact[i - 1];
}

int main() {
    fin >> N >> D;

    if (D == 2 || D == 3 || D == 5) {
        compute_fact(D, fact);

        int start_interval = 0;
        for (int i = 0; i <= N; ++i) {
            const int cnt = fact[N] - fact[N - i] - fact[i];
            if (cnt) ++ans;
        }
        fout << ans;
        return 0;
    }

    if (D == 4) {
        return 0;
        compute_fact(2, fact);

        for (int i = 0; i <= N; ++i) {
            const int cnt = fact[N] - fact[N - i] - fact[i];
            if (cnt > 1) ++ans;
        }
        fout << ans;
        return 0;
    }

    if (D == 6) {
        compute_fact(2, fact);
        compute_fact(3, fact2);

        for (int i = 0; i <= N; ++i) {
            const int cnt = fact[N] - fact[N - i] - fact[i];
            const int cnt2 = fact2[N] - fact2[N - i] - fact2[i];
            if (cnt && cnt2) {
                ++ans;
            }
        }
        fout << ans;
        return 0;
    }

    return 0;
}