自己写个死活都TLE。。。。看的别人的才过。
任意一个数都可以分解为
n=p1^e1*p2^e2*...*pn^en,,,,
其中p1,,p2,,pn为素数,,,,,
则n的约数的个数为(e1+1)*(e2+1)*...*(en+1),,,,
利用筛法,,我们可以求出1~n中每个数的所有素约数的指数,,,,,
C(n,k)=n!/k!/(n-k)!,,,,,,
over,,,,
//============================================================================
// Name : 2992.cpp
// Author :
// Version :
// Copyright : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
int e[432][432], sum[432][432];
bool prime[432];
int num, n, k;
long long ans;
int main(){
freopen("a.txt", "r", stdin);
for(int i = 2;i < 432;i++){
if(!prime[i]){
++num;
e[i][num]++;
for(int j = i<<1;j < 432;j+=i){
prime[j] = true;
e[j][num] = e[j/i][num]+1;
}
}
}
for(int i = 1;i < 432;i++){
for(int k = 1;k <= num;k++){
sum[i][k] = sum[i-1][k]+e[i][k];
}
}
while(scanf("%d%d", &n, &k)!=EOF){
ans = 1;
for(int i = 1;i <= num;i++){
ans = ans*(sum[n][i] - sum[k][i] - sum[n-k][i]+1);
}
printf("%I64d\n", ans);
}
return 0;
}