Binomial Coeffcients
Time Limit: 1000MS Memory limit: 65536K
题目描述
输入
输出
示例输入
3 1 1 10 2 954 723
示例输出
1 45 3557658
提示
来源
山东省第二届ACM大学生程序设计竞赛
计算二项式系数对于10000003的模,问题主要是如何求出二项式系数:
开始的思路是先算出n!对于10000003的模,再算出(n-k)!对于10000003的模,及k!对于10000003的模,然后再算出题目要求的,但这样所求的结果不对,可能是同余的可除性是有条件的即,条件可除性,所以不对.注意到二项式系数与杨辉三角的关系,可以直接求出题目要求的模:
代码:
#include<iostream>
#include<stdio.h>
#include<memory.h>
#define M 10000003
#define N 1000
using namespace std;
int c[1000][1001];
int mod(int n,int k)
{
if(n==0)
return 1;
return c[n-1][k];
}
int main()
{
int n,t,k,i,m,j;
c[0][0]=1;
c[0][1]=1;
for(i=0;i<N;i++)
{
c[i][0]=1;
for(j=1;j<=i;j++)
{
c[i][j]=c[i-1][j-1]+c[i-1][j];
if(c[i][j]>M)
c[i][j]=c[i][j]%M; //防止溢出整形范围
}
c[i][j]=1;
}
while(scanf("%d",&t)!=EOF)
{
for(i=0; i<t; i++)
{
scanf("%d%d",&n,&k);
m=mod(n,k);
printf("%d\n",m);
}
}
}