摘要:
由于素数P比较小,所以可以先打表,求出小于P的数的阶乘对与该素数的余数,这样节省了中间求阶乘的时间。/* * soj3290.c * * Created on: 2011-10-10 * Author: bjfuwangzhu */#include<stdio.h>#define LL long long#define nmod 10009int num[nmod];void init() { int i; for (i = 1, num[0] = 1; i < nmod; i++) { num[i] = num[i - 1] * i % nmod; ... 阅读全文
posted @ 2011-10-10 13:06
qingyezhu
阅读(205)
评论(0)
推荐(0)
摘要:
1)根据一下公式,直接计算 C(n,m) mod p = n*``*(n-m+1)/(1*``*m) mod p 计算分别分子nn、分母mm中p的个数和对p的余数,若分子中p的个数多余分母中p的个数,则结果为0, 若不是,则原式变为nn/mm mod p (nn,p)=1,(mm,p)=1 此时如何求逆元变得至关重要,以下有两种解法。2)Lucas 定理:是用来求 C(n,m) mod p的值,p是素数。 描述为: Lucas(n,m,p)=C(n%p,m%p)* Lucas(n/p,m/p,p) Lucas(n,0,p)=1; 而 C(a,b)=a*(a-1)*```*(a-... 阅读全文
posted @ 2011-10-10 12:03
qingyezhu
阅读(1061)
评论(0)
推荐(0)
摘要:
对于本题的因数m,只需要将其化素因子的乘积形式,之后只需要判定每一个素因子p在组合数中的个数是否大于或等于在因数m中的个数,若是则输出Yes,若存在某一个不是则输出No。至于如何判断一个素因子在组合数中的个数,如下所示://获得素因子p在1*2*··n中的个数int getNum(int n, int p) { int res; res = 0; while (n) { res += n / p; n /= p; } return res;}代码如下:#include<stdio.h>#include<string.h>#include... 阅读全文
posted @ 2011-10-10 10:38
qingyezhu
阅读(252)
评论(0)
推荐(0)

浙公网安备 33010602011771号