Pagini recente » Cod sursa (job #567109) | Cod sursa (job #3192929)
#include <fstream>
using namespace std;
ifstream fin("pascal.in");
ofstream fout("pascal.out");
constexpr int LIM = 5000005;
int n, d, s1[LIM], s2[LIM];
inline int sum(int x, int p) {
int S = 0;
while (x) {
S += x % p;
x /= p;
}
return S;
}
int main() {
fin >> n >> d;
int cnt = 0;
if (d == 2 || d == 3 || d == 5) {
for (int i = 0; i <= n; ++i)
s1[i] = sum(i, d);
for (int i = 0; i <= n; ++i)
if ((s1[i] + s1[n - i] - s1[n]) / (d - 1) >= 1) ++cnt;
} else if (d == 4) {
for (int i = 0; i <= n; ++i)
s1[i] = sum(i, 2);
for (int i = 0; i <= n; ++i)
if (s1[i] + s1[n - i] - s1[n] >= 2) ++cnt;
} else {
for (int i = 0; i <= n; ++i)
s1[i] = sum(i, 2), s2[i] = sum(i, 3);
for (int i = 0; i <= n; ++i)
if (s1[i] + s1[n - i] - s1[n] >= 1 &&
(s2[i] + s2[n - i] - s2[n]) / 2 >= 1) ++cnt;
}
fout << cnt;
fin.close();
fout.close();
return 0;
}