#include #include #include #include #define N 432 int f[N][N]; int g[N][N]; void add(int p[], int q[]) { int i; for (i = 0; i < N; i++) { p[i] += q[i]; } } void sub(int p[], int q[]) { int i; for (i = 0; i < N; i++) { /* if (p[i] < q[i]) { fprintf(stderr,"BUUUUG %d %d %d\n",i,p[i],q[i]); exit(1); } */ p[i] -= q[i]; } } typedef unsigned long long ull; int main() { int i, j, k, x, n; int p[N]; ull d; for (i = 0; i < N; i++) { x = i; memset(f[i],0,sizeof(f[0])); for (j = 2; j <= i; j++) { while (x % j == 0) { x /= j; f[i][j]++; } } } for (n = 0; n < N; n++) { memset(g[n],0,sizeof(g[0])); for (i = 2; i <=n ; i++) add(g[n],f[i]); } while (scanf("%d%d",&n,&k) == 2) { memset(p,0,sizeof(p)); add(p,g[n]); sub(p,g[k]); sub(p,g[n-k]); d = 1ULL; for (i = 0; i < N; i++) { d = d*(p[i]+1); } printf("%llu\n",d); } return 0; }