codevs 1631组合数 乘法逆元求组合数

来源:互联网 发布:开淘宝快递怎么弄 编辑:程序博客网 时间:2024/05/04 06:22

由于组合数有时候m和n比较大,这样就无法一开始打表求得(不是指本题),所以用乘法逆元求组合数,至于为什么可以这样做请自行百度。

#include <cstring>#include <algorithm>#include <iostream>#include <cstdio>using namespace std;#define mod 100003#define ll long longll inv[110000],c[110000];void init(){    inv[1]=1;    for(int i=2;i<=110000;i++)    {        inv[i]=(mod-mod/i)*inv[mod%i]%mod;    }}ll getcal(int n,int m){    c[0]=1;    for(int i=1;i<=m;i++)    {        c[i]=c[i-1]*((n-i+1)%mod*inv[i]%mod)%mod;        c[i]=c[i]%mod;    }    return c[m];}int main(){    init();    int m,n,x;    int cas;    scanf("%d%d",&n,&m);    printf("%lld\n",getcal(n,m));    return 0;}


0 0