优化了5遍,188MS还是没跑进第一页。。
一定是姿势不对-_-#
阶乘n!中的素因子的个数
[n/p]+[n/p^2]+[n/p^3]+...
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn =430+5;
typedef long long LL;
LL C[maxn][maxn/2+10];
void init()
{
bool vis[maxn];
for(int i=0;i<maxn;i++) vis[i]=0;
for(int i=4;i<maxn;i+=2)
vis[i]=1;
int num[100];
int k=0;num[k++]=2;
for(int i=3;i<maxn;i+=2)
if(!vis[i]){
num[k++]=i;
for(int j=i*i;j<maxn;j+=i)
vis[j]=1;
}
int jie[maxn][100];
for(int i=0;i<k;i++)
for(int j=0;j<maxn;j++)
jie[j][i]=j/num[i]+jie[j/num[i]][i];
for(int i=2;i<maxn;i++)
for(int j=1;j<=i/2;j++){
C[i][j]=1;
for(int i1=0;i1<k&&jie[i][i1];i1++)
C[i][j]*=(jie[i][i1]-jie[j][i1]-jie[i-j][i1]+1);
}
}
int main()
{
init();
int n,x;
while(~scanf("%d%d",&n,&x))
{
if(x==0||x==n)
printf("1\n");
else
{
x=x>n-x?n-x:x;
printf("%I64d\n",C[n][x]);
}
}
return 0;
}