Pagini recente » Cod sursa (job #1660864) | Cod sursa (job #288532) | Rezultatele filtrării | Cod sursa (job #203952) | Cod sursa (job #2689568)
#include <fstream>
using namespace std;
const int NMAX = 5000000;
int exp[2][1 + NMAX];
void initExp(int* exp, int lim, int d)
{
for (int base = d; base <= lim; base = base * d)
{
for (int j = base; j <= lim; j = j + base)
{
exp[j]++;
}
}
for (int i = 1; i <= lim; i++)
{
exp[i] += exp[i - 1];
}
}
int main()
{
ifstream in("pascal.in");
ofstream out("pascal.out");
int r;
int d;
int sol = 0;
int minim = 1;
in >> r >> d;
if (r < 2)
{
out << 0;
return 0;
}
if (d == 4)
{
initExp(exp[0], r, 2);
minim = 2;
}
else if (d == 6)
{
initExp(exp[0], r, 2);
initExp(exp[1], r, 3);
}
else
{
initExp(exp[0], r, d);
}
int i = 1;
for (i = 1; i <= (r - 1) / 2; i++)
{
if (exp[0][r] - exp[0][i] - exp[0][r - i] >= minim)
{
if (d != 6)
{
sol += 2;
}
else
{
if (exp[1][r] - exp[1][i] - exp[1][r - i] >= minim)
sol += 2;
}
}
}
if (r % 2 == 0)
{
if (exp[0][r] - exp[0][i] - exp[0][r - i] >= minim)
{
if (d != 6)
{
sol++;
}
else
{
if (exp[1][r] - exp[1][i] - exp[1][r - i] >= minim)
sol++;
}
}
}
out << sol << '\n';
return 0;
}