Pagini recente » Cod sursa (job #585630) | Cod sursa (job #408242) | Cod sursa (job #1101499) | Cod sursa (job #1101008) | Cod sursa (job #1464565)
#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 = d; i <= r; i += d) {
p[i] = p[i / d] + 1;
}
for (int i = 1; i <= r; i++) {
f[i] = f[i - 1] + p[i];
}
}
long long fct(int r, int d) {
long long ans = 0;
int* f = new int[r + 1];
int* p = new int[r + 1];
if (d == 2) {
com(f, p, r, 2);
for (int i = 0; 2 * i < r; i++) {
if (f[r] - f[i] - f[r - r] > 0) {
ans += 2;
}
}
if (r % 2 == 0 && f[r] - 2 * f[r / 2] > 0) {
ans++;
}
} else if (d == 4) {
com(f, p, r, 2);
for (int i = 0; 2 * i < r; i++) {
if (f[r] - f[i] - f[r - i] > 1) {
ans += 2;
}
}
if (r % 2 == 0 && f[r] - 2 * f[r / 2] > 1) {
ans++;
}
} else if (d == 3 || d == 6) {
com(f, p, r, 3);
for (int i = 0; 2 * i < r; i++) {
if (f[r] - f[i] - f[r - i] > 0) {
ans += 2;
}
}
if (r % 2 == 0 && f[r] - 2 * f[r / 2] > 0) {
ans++;
}
} else {
com(f, p, r, 5);
for (int i = 0; 2 * i < r; i++) {
if (f[r] - f[i] - f[r - i] > 0) {
ans += 2;
}
}
if (r % 2 == 0 && f[r] - 2 * f[r / 2] > 0) {
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;
}