Pagini recente » Cod sursa (job #1919867) | Cod sursa (job #225615) | Cod sursa (job #860261) | Cod sursa (job #3223878) | Cod sursa (job #789224)
Cod sursa(job #789224)
#include <fstream>
#include <iostream>
using namespace std;
ifstream fi("pascal.in");
ofstream fo("pascal.out");
int *dfact;
int compute(int R, int D)
{
int c = 0, nd;
for(int i = 0; i < (R + 1) / 2; i++)
{
nd = dfact[R] - dfact[R - i] - dfact[i];
if(nd > 0) c++;
}
c *= 2;
if(R % 2 == 0)
{
nd = dfact[R] - dfact[R - R / 2] - dfact[R / 2];
if(nd > 0) c++;
}
return c;
}
int P[32] = {0};
void prepow(int d, int r)
{
int p = d;
int i = 0;
while(p <= r)
{
P[i++] = p;
p *= d;
}
i = 0;
}
inline int df(int x, int d)
{
int c(0), i(0);
while(P[i] > 0)
c += (x / P[i++]);
return c;
}
void pre(int R, int D)
{
prepow(D, R);
dfact = new int[R + 1];
for(int i = 0; i <= R; i++)
{
dfact[i] = df(i, D);
}
}
int main(int argc, char *argv[])
{
int R, D;
fi >> R >> D;
pre(R, D);
fo << compute(R, D) << endl;
fi.close();
fo.close();
return 0;
}