Pagini recente » Istoria paginii runda/ignore_plz/clasament | Cod sursa (job #949979) | Cod sursa (job #157049) | Cod sursa (job #1277960) | Cod sursa (job #2673695)
#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;
in >> r >> d;
if (r < 2)
{
out << 0;
return 0;
}
if (d == 4)
{
initExp(exp[0], r / 2, 2);
for (int i = 1; i <= r / 2; i++)
{
exp[0][i] /= 2;
}
}
else if (d == 6)
{
initExp(exp[0], r, 2);
initExp(exp[1], r, 3);
for (int i = 1; i <= r / 2; i++)
{
exp[0][i] = min(exp[0][i], exp[1][i]);
}
}
else
{
initExp(exp[0], r, d);
}
int i = 1;
for (i = 1; i <= (r - 1) / 2; i++)
{
// out << r << ' ' << i << ": " << exp[0][r] << ' ' << exp[0][i] << ' ' << exp[0][r - i] << endl;
if (exp[0][r] - exp[0][i] - exp[0][r - i] > 0)
{
sol += 2;
}
}
if (r % 2 == 0)
{
// out << r << ' ' << i << ": " << exp[0][r] << ' ' << exp[0][i] << ' ' << exp[0][r - i] << endl;
if (exp[0][r] - exp[0][i] - exp[0][r - i] > 0)
{
sol++;
}
}
out << sol << '\n';
return 0;
}