Pagini recente » Cod sursa (job #891132) | Cod sursa (job #850232) | Cod sursa (job #1840398) | Cod sursa (job #1085204) | Cod sursa (job #941607)
Cod sursa(job #941607)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("pascal.in");
ofstream fout("pascal.out");
int R, D, lg, fact[30];
int nfact(int N)
{
int sol = 0;
while (N)
sol = sol + (N /= D);
return sol;
}
int nnum(int N)
{
int i = 0, cnt = 1 << 5;
for (; cnt > 0; cnt >>= 1)
if (i + cnt < lg and N % fact[i + cnt] == 0)
i += cnt;
return i;
}
int main()
{
fin >> R >> D;
fact[0] = 1;
for (lg = 1; fact[lg - 1] <= R; lg++)
fact[lg] = fact[lg - 1] * D;
// R! / K! * (R-K)!
int r = nfact(R), left = 0, right = r, sol = 0;
for (int i = 0; i <= (R >> 1); i++)
{
if (r > left + right)
sol++;
left = left + nnum(i + 1);
right = right - nnum(R - i);
}
sol = sol << 1;
if (!(R & 1))
if (nfact(R) > 2 * nfact(R >> 1))
sol--;
fout << sol << '\n';
fin.close();
fout.close();
return 0;
}