Pagini recente » Cod sursa (job #113541) | Cod sursa (job #365037) | Cod sursa (job #1412247) | Cod sursa (job #268386) | Cod sursa (job #1263684)
#include <iostream>
#include <fstream>
inline int getpowf(int r, int base) {
int sol = 0;
for (int i = r / base; i; i /= base) {
sol += i;
}
return sol;
}
inline int getpow(int n, int base) {
int sol = 0;
for (; n % base == 0; n /= base) {
sol++;
}
return sol;
}
int main()
{
std::ifstream in("pascal.in");
std::ofstream out("pascal.out");
int r, d;
in >> r >> d;
int pow2num = getpowf(r, 2);
int pow3num = getpowf(r, 3);
int pow5num = getpowf(r, 5);
int pow2den = pow2num;
int pow3den = pow3num;
int pow5den = pow5num;
int sol = 0;
for (int j = 1; j < r; ++j) {
// Adding in j, taking out (r - j + 1).
pow2den = pow2den + getpow(j, 2) - getpow(r - j + 1, 2);
pow3den = pow3den + getpow(j, 3) - getpow(r - j + 1, 3);
pow5den = pow5den + getpow(j, 5) - getpow(r - j + 1, 5);
switch (d) {
case 2: if (pow2num - pow2den > 0) sol++; break;
case 3: if (pow3num - pow3den > 0) sol++; break;
case 4: if (pow2num - pow2den > 1) sol++; break;
case 5: if (pow5num - pow5den > 0) sol++; break;
case 6: if (pow2num - pow2den > 0 && pow3num - pow3den > 0) sol++; break;
}
}
out << sol << std::endl;
in.close();
out.close();
return 0;
}