#include <stdio.h>
enum { divs = 3 };
const int div[divs] = { 2, 3, 5 };
int base;
int want[divs];
int ans;
void decomp(int val, int d[divs])
{
d[0] = 0;
d[1] = 0;
d[2] = 0;
while(val % 2 == 0)
{
d[0]++;
val /= 2;
}
while(val % 3 == 0)
{
d[1]++;
val /= 3;
}
while(val % 5 == 0)
{
d[2]++;
val /= 5;
}
}
inline void multiply(int a[divs], const int b[divs])
{
a[0] += b[0];
a[1] += b[1];
a[2] += b[2];
}
inline void divide(int a[divs], const int b[divs])
{
a[0] -= b[0];
a[1] -= b[1];
a[2] -= b[2];
}
inline bool divides(const int a[divs], const int b[divs])
{
return (a[0] >= b[0]) && (a[1] >= b[1]) && (a[2] >= b[2]);
}
void go()
{
int i, cur[divs], tmp[divs];
decomp(1, cur); //C(0, base)
for(i = 1; i < (base + 1) / 2; i++) //C(i, base) and C(base - i, base)
{
decomp(base - i + 1, tmp);
multiply(cur, tmp);
decomp(i, tmp);
divide(cur, tmp);
if(divides(cur, want))
ans++;
//printf("i %d. cur %d %d %d\n", i, cur[0], cur[1], cur[2]);
}
printf("half ans %d\n", ans);
ans *= 2;
if((base + 1) % 2) //one more, in the middle, C(base/2, base)
{
i = base / 2;
decomp(base - i + 1, tmp);
multiply(cur, tmp);
decomp(i, tmp);
divide(cur, tmp);
if(divides(cur, want))
ans++;
//printf("i %d. cur %d %d %d\n", i, cur[0], cur[1], cur[2]);
}
printf("final ans %d\n", ans);
}
int main()
{
int tmp;
FILE *f = fopen("pascal.in", "r");
if(!f) return 1;
fscanf(f, "%d%d", &base, &tmp);
decomp(tmp, want);
fclose(f);
f = fopen("pascal.out", "w");
if(!f) return 1;
go();
fprintf(f, "%d\n", ans);
fclose(f);
return 0;
}