Pagini recente » Cod sursa (job #106040) | Cod sursa (job #1234743) | Cod sursa (job #851919) | Cod sursa (job #432819) | Cod sursa (job #893609)
Cod sursa(job #893609)
#include <fstream>
using namespace std;
int R, D;
int p0, p1, p2;
int total; // 2, 3 sau 5 (ca divizori primi)
int main()
{
ifstream fin("pascal.in");
ofstream fout("pascal.out");
fin >> R >> D;
for (int i = 2; i <= R; i *= 2) p0 += R / i;
for (int i = 3; i <= R; i *= 3) p1 += R / i;
for (int i = 5; i <= R; i *= 5) p2 += R / i;
for (int i = 1; i < R; ++i)
{
// R! / i! * (R - i)!
int d0 = 0, d1 = 0, d2 = 0;
for (int j = 2; j <= i; j *= 2) d0 += i / j;
for (int j = 3; j <= i; j *= 3) d1 += i / j;
for (int j = 5; j <= i; j *= 5) d2 += i / j;
for (int j = 2; j <= R - i; j *= 2) d0 += (R - i) / j;
for (int j = 3; j <= R - i; j *= 3) d1 += (R - i) / j;
for (int j = 5; j <= R - i; j *= 5) d2 += (R - i) / j;
d0 = p0 - d0;
d1 = p1 - d1;
d2 = p2 - d2;
if (D == 2 && d0) ++total;
if (D == 3 && d1) ++total;
if (D == 4 && d0 >= 2) ++total;
if (D == 5 && d2) ++total;
if (D == 6 && d0 && d1) ++total;
}
fout << total;
fin.close();
fout.close();
}