Pagini recente » Cod sursa (job #1931612) | Cod sursa (job #2884163) | Cod sursa (job #2557849) | Cod sursa (job #2203872) | Cod sursa (job #941595)
Cod sursa(job #941595)
#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; i++)
{
if (r > left + right)
sol++;
left = left + nnum(i + 1);
right = right - nnum(R - i);
}
fout << sol << '\n';
fin.close();
fout.close();
return 0;
}