#include int primes[1000]; int n,k; int mn[1000],mk[1000],mnk[1000],mt[1000]; void subm(int *m,int *n) { int i; for (i=2;i<1000;i++) { m[i]-=n[i]; } } void addm(int *m,int *n) { int i; for (i=2;i<1000;i++) { m[i]+=n[i]; } } void getm1(int n, int *m) { int i; for (i=2;i<1000;i++) { if (!primes[i]) { int t; t=n; for (;!(t%i);t/=i) /* printf("%d",i); */ m[i]++; } } } void getm(int n,int *m) { int i; for (i=2;i<=n;i++) { memset(mt,0,sizeof(int)*1000); getm1(i,mt); /* printf("%d: ",i); int x; for (x=0;x<20;x++) printf("%d",mt[x]); printf("\n");*/ addm(m,mt); } } int main(void) { int i,j; primes[1]=1; primes[0]=1; for (i=2;i*i<1000;i++) { for (j=2*i;j<1000;j+=i) { primes[j]=1; } } /* for (i=0;i<1000;i++) { if (!primes[i]) printf("%d,",i); }*/ while (scanf("%d %d",&n,&k)==2) { memset(mn,0,sizeof(int)*1000); memset(mk,0,sizeof(int)*1000); memset(mnk,0,sizeof(int)*1000); getm(n,mn); getm(k,mk); getm(n-k,mnk); subm(mn,mk); subm(mn,mnk); int x; /* for (x=0;x<20;x++) printf("%d",mn[x]);*/ for (x=0;x<1000;x++) { mn[x]++; } unsigned long long s=1; for (x=0;x<1000;x++) { s*=mn[x]; } printf("%lli\n",s); } return 0; }