Pagini recente » Cod sursa (job #2369751) | Cod sursa (job #1423892) | Cod sursa (job #2954925) | Cod sursa (job #496627) | Cod sursa (job #1464574)
#include <cstdio>
#include <iostream>
#include <vector>
#include <set>
#include <cmath>
#include <climits>
#include <list>
#include <iomanip>
#include <cstdlib>
#include <fstream>
#include <map>
#include <algorithm>
#define nmax 500005
using namespace std;
void com(int* f, int* p, int r, int d) {
for (int i = 0; i <= r; i++) {
p[i] = 0;
}
for (int i = d; i <= r; i += d) {
p[i] = p[i / d] + 1;
}
f[0] = 0;
for (int i = 1; i <= r; i++) {
f[i] = f[i - 1] + p[i];
}
}
long long evol(int* f, int r, int m) {
long long ans = 0;
for (int i = 0; 2 * i < r; i++) {
if (f[r] - f[i] - f[r - i] > m) {
ans += 2;
}
}
if (r % 2 == 0 && f[r] - 2 * f[r / 2] > m) {
ans++;
}
return ans;
}
long long fct(int r, int d) {
if (r == 0) {
return 0;
}
long long ans = 0;
int* f = new int[r + 1];
int* p = new int[r + 1];
if (d == 2) {
com(f, p, r, 2);
ans = evol(f, r, 0);
} else if (d == 4) {
com(f, p, r, 2);
ans = evol(f, r, 1);
} else if (d == 3) {
com(f, p, r, 3);
ans = evol(f, r, 0);
} else if (d == 5) {
com(f, p, r, 5);
ans = evol(f, r, 0);
} else {
com(f, p, r, 2);
int* f3 = new int[r + 1];
int* p3 = new int[r + 1];
com(f3, p3, r, 3);
for (int i = 0; 2 * i < r; i++) {
if (f[r] - f[i] - f[r - i] > 0 && f3[r] - f3[i] - f3[r - i]) {
ans += 2;
}
}
if (r == 2 && f[r] - 2 * f[r / 2] > 0 && f3[r] - 2 * f3[r / 2]) {
ans++;
}
}
return ans;
}
int main() {
freopen("pascal.in", "r", stdin);
freopen("pascal.out", "w", stdout);
ios_base::sync_with_stdio(false);
cin.tie(0);
int r, d;
cin >> r >> d;
long long ans = fct(r, d);
cout << ans;
return 0;
}