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