Pagini recente » Cod sursa (job #13756) | Cod sursa (job #1108767) | Cod sursa (job #396654) | Cod sursa (job #2990847) | Cod sursa (job #3339031)
#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;
}