Pagini recente » Cod sursa (job #2806115) | Cod sursa (job #221227) | Cod sursa (job #1498278) | Cod sursa (job #2087703) | Cod sursa (job #827351)
Cod sursa(job #827351)
#include <cstdio>
using namespace std;
const int MaxN = 5000005;
int M, FPow2[MaxN], FPow3[MaxN], FPow5[MaxN], D, Solution;
int Pow2, Pow3, Pow5;
void Preprocess() {
for (int k = 1; k <= M; ++k) {
if (k % 2 == 0)
FPow2[k] = FPow2[k / 2] + 1;
if (k % 3 == 0)
FPow3[k] = FPow3[k / 3] + 1;
if (k % 5 == 0)
FPow5[k] = FPow5[k / 5] + 1;
}
}
inline int IsDivisible() {
if (D == 2)
return Pow2 > 0;
if (D == 3)
return Pow3 > 0;
if (D == 4)
return Pow2 > 1;
if (D == 5)
return Pow5 > 0;
if (D == 6)
return Pow2 > 0 && Pow3 > 0;
}
void Solve() {
Preprocess();
for (int k = 1, n = M; k <= M / 2; ++k, --n) {
Pow2 += FPow2[n] - FPow2[k];
Pow3 += FPow3[n] - FPow3[k];
Pow5 += FPow5[n] - FPow5[k];
Solution += 2*IsDivisible();
}
Solution -= (M % 2 == 0 && IsDivisible());
}
void Read() {
freopen("pascal.in", "r", stdin);
scanf("%d %d", &M, &D);
}
void Print() {
freopen("pascal.out", "w", stdout);
printf("%d\n", Solution);
}
int main() {
Read();
Solve();
Print();
return 0;
}