Pagini recente » Cod sursa (job #2717233) | Cod sursa (job #2480446) | Cod sursa (job #1480870) | Cod sursa (job #153435) | Cod sursa (job #893597)
Cod sursa(job #893597)
#include <fstream>
using namespace std;
int R, D;
int times[3], total; // 2, 3 sau 5 (ca divizori primi)
int p0[5000002], p1[5000002], p2[5000002];
bool done[5000002];
int main()
{
ifstream fin("pascal.in");
ofstream fout("pascal.out");
done[1] = true;
for (int i = 1; i < 2; ++i)
if (!done[i * 2] || !done[i * 3] || !done[i * 5])
{
for (int j = i * 2, steps = 1; j < 5000000 && !done[j]; j *= 2, ++steps)
{
p0[j] = p0[i] + steps;
p1[j] = p1[i];
p2[j] = p2[i];
done[j] = true;
}
for (int j = i * 3, steps = 1; j < 5000000 && !done[j]; j *= 3, ++steps)
{
p0[j] = p0[i];
p1[j] = p1[i] + steps;
p2[j] = p2[i];
done[j] = true;
}
for (int j = i * 5, steps = 1; j < 5000000 && !done[j]; j *= 5, ++steps)
{
p0[j] = p0[i];
p1[j] = p1[i];
p2[j] = p2[i] + steps;
done[j] = true;
}
}
fin >> R >> D;
for (int i = 1; i < R; ++i)
{
int now1 = R - i + 1, now2 = i;
times[0] += p0[now1];
times[1] += p1[now1];
times[2] += p2[now1];
times[0] -= p0[now2];
times[1] -= p1[now2];
times[2] -= p2[now2];
if (D == 2 && times[0]) ++total;
if (D == 3 && times[1]) ++total;
if (D == 4 && times[0] >= 2) ++total;
if (D == 5 && times[2]) ++total;
if (D == 6 && times[0] && times[1]) ++total;
}
fout << total;
fin.close();
fout.close();
}