Nu aveti permisiuni pentru a descarca fisierul grader_test53.ok
Cod sursa(job #3339025)
| Utilizator | Data | 5 februarie 2026 19:29:11 | |
|---|---|---|---|
| Problema | Pascal | Scor | 10 |
| 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 = 2500002;
int N, D, ans;
int fact[MAXN], fact2[MAXN];
int fact_N, fact2_N;
static inline void compute_fact(int prime, int fact[]) {
for (int i = prime; i <= N / 2; i *= prime) {
for (int j = i; j <= N / 2; 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);
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) {
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) {
return 0;
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;
}
