Pagini recente » Cod sursa (job #1881911) | Cod sursa (job #1638139) | Cod sursa (job #840380) | Cod sursa (job #1049630) | Cod sursa (job #3357380)
#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 a[3];
};
const int DESC[] = {2, 3, 5};
int n, k, i, rasp;
static inline void Desc(int n, Fact& f) {
f.a[0] = f.a[1] = f.a[2] = 0;
for(int i = 0; i < 3; i++) {
while(0 == n % DESC[i]) {
f.a[i]++;
n /= DESC[i];
}
}
}
static inline bool Divi(const Fact& a, const Fact& d) {
for(int i = 0; i < 3; i++) {
if(a.a[i] < d.a[i]) return false;
}
return true;
}
static inline void Add(Fact& f, const Fact& a, int semn) {
for(int i = 0; i < 3; i++) {
f.a[i] += semn * a.a[i];
}
}
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;
factCur.a[0] = 0;
factCur.a[1] = 0;
factCur.a[2] = 0;
for(i = 1; i <= n; i++) {
Fact factDesc;
Desc(n - i + 1, factDesc);
Add(factCur, factDesc, 1);
Desc(i, factDesc);
Add(factCur, factDesc, -1);
if(Divi(factCur, factK)) {
rasp++;
}
}
fout << rasp;
return 0;
}