Pagini recente » Cod sursa (job #1804422) | Cod sursa (job #1607117) | Cod sursa (job #1021445) | Cod sursa (job #1006378) | Cod sursa (job #3357381)
#include <bits/stdc++.h>
using namespace std;
#define USE_STD_IO 0
#if USE_STD_IO
#define fin cin
#define fout cout
#else
ifstream fin("pascal.in");
ofstream fout("pascal.out");
#endif // USE_STD_IO
struct Fact {
int f2 = 0, f3 = 0, f5 = 0;
};
int n, k, i, rasp;
static inline void Desc(int n, Fact& f) {
f.f2 = f.f3 = f.f5 = 0;
while(0 == n % 2) {
f.f2++;
n /= 2;
}
while(0 == n % 3) {
f.f3++;
n /= 3;
}
while(0 == n % 5) {
f.f5++;
n /= 5;
}
}
static inline bool Divi(const Fact& a, const Fact& d) {
return (a.f2 >= d.f2 && a.f3 >= d.f3 && a.f5 >= d.f5);
}
static inline void Add(Fact& f, const Fact& a) {
f.f2 += a.f2;
f.f3 += a.f3;
f.f5 += a.f5;
}
static inline void Del(Fact& f, const Fact& a) {
f.f2 -= a.f2;
f.f3 -= a.f3;
f.f5 -= a.f5;
}
int main() {
#if USE_STD_IO
ios_base::sync_with_stdio(false);
#endif // USE_STD_IO
fin.tie(NULL);
fout.tie(NULL);
fin >> n >> k;
Fact factK;
Desc(k, factK);
Fact factCur;
for(i = 1; i <= n; i++) {
Fact factDesc;
Desc(n - i + 1, factDesc);
Add(factCur, factDesc);
Desc(i, factDesc);
Del(factCur, factDesc);
if(Divi(factCur, factK)) {
rasp++;
}
}
fout << rasp;
return 0;
}