Pagini recente » Cod sursa (job #2979722) | Cod sursa (job #574462) | Cod sursa (job #906745) | Cod sursa (job #88555) | Cod sursa (job #141003)
Cod sursa(job #141003)
#include <iostream>
#include <fstream>
using namespace std;
int R,
D, DD;
long pN, pN6, pK, pNK, pK6, pNK6;
int nrdiv(int n, int D) {
if (4 == D)
D = 2;
int r(0);
for (long i = D; i <= n; i *= D)
r += n / i;
return r;
}
int main(int argc, char *argv[]) {
ifstream fin("pascal.in");
fin >> R >> D;
fin.close();
//cout << R << " " << D << endl;
if (6 != D)
pN = nrdiv(R, D);
else {
pN = nrdiv(R, 2);
pN6 = nrdiv(R, 3);
}
//cout << pN << endl;
DD = D;
if (4 == D)
DD = 2;
long res(0),
vah;
int aux, i;
pK = 0;
pNK = pN;
for (int k(1); k <= R / 2; ++k) {
if (6 != D) {
/*pK = nrdiv(k, D);
pNK = nrdiv(R - k, D);*/
aux = k;
i = 0;
while (aux % DD == 0) {
aux /= DD;
++i;
}
pK += i;
aux = R - k + 1;
i = 0;
while (aux % DD == 0) {
aux /= DD;
++i;
}
pNK -= i;
vah = pN - pK - pNK;
if (4 == D)
vah /= 2;
} else {
aux = k;
i = 0;
while (aux % 2 == 0) {
aux /= 2;
++i;
}
pK += i;
aux = R - k + 1;
i = 0;
while (aux % 2 == 0) {
aux /= 2;
++i;
}
pNK -= i;
vah = pN - pK - pNK;
if (vah) {
pK = nrdiv(k, 3);
pNK = nrdiv(R - k, 3);
vah = pN6- pK - pNK;
}
}
//cout << k << " " << pK << " " << pNK << " -> " << vah << endl;
if (vah)
if ((R % 2 == 0) && (k == R / 2))
++res;
else
res += 2;
}
ofstream fout("pascal.out");
fout << res << endl;
fout.close();
return 0;
}