摘要:        
/* * hdu1521.c * * Created on: 2011-8-31 * Author: 王竹 */#include<stdio.h>#include<string.h>#define nmax 15int num[nmax];double res[nmax], fac[nmax], temp[nmax];void init(int n) { int i; fac[0] = 1; for (i = 1; i <= n; i++) { fac[i] = fac[i - 1] * i; }}int main() {#ifndef ONL...    阅读全文
        
            posted @ 2011-10-10 21:31
qingyezhu
阅读(346)
评论(0)
推荐(0)
        
        
            
        
        
摘要:        
由题知:(1+x/1!+x^2/2!+``+x^n/n!)^2*(1+x^2/2!+```)^2由e^x=1+x/1!+x^2/2!+```知原式=e^(2*x)*((e^x+e^(-x))/2)^2 =(1/4)*(e^(2*x)+1)^2 =(1/4)*(e^(4*x)+2*e^(2*x)+1) =(1/4)*(sia(4^n)*(x^n/n!)+2*sia(2^n)*(x^n/n!)+1) 由以上式子可知: x^n/n!的系数为(4^n+2*2^n+1)/4=4^(n-1)+2^(n-1)+1/4对于本题只需要计算(4^(n-1)+2^(n-1))%100即可。其中设计大数取余...    阅读全文
        
            posted @ 2011-10-10 21:30
qingyezhu
阅读(530)
评论(0)
推荐(0)
        
        
            
        
        
摘要:        
题目链接:http://acm.hrbeu.edu.cn/index.php?act=problem&id=1010&cid=25其中P为非素数,所以有:将C(n,m)%p=p0^C0```pi^Ci%p#include<stdio.h>#include<string.h>#define LL long long#define nmax 100001int flag[nmax], prime[nmax];int plen;void mkprime() { int i, j; memset(flag, -1, sizeof(flag)); for (i =    阅读全文
        
            posted @ 2011-10-10 21:14
qingyezhu
阅读(400)
评论(0)
推荐(0)
        
        
            
        
        
摘要:        
很典型的动态规划题很好的算法:f(m, n) = f(m-n, n) + f(m, n-1)f(m, n): 把m个苹果放到n个盘子中的方法数f(m, n-1): 把m个苹果放到n-1个盘子中的方法数(其中至少有一个空盘子)f(m-n, n): 把m个苹果放到n个盘子中,而且每个盘子中都有苹果(先拿n个出来,等m-n个放好了,然后每个盘子放一个)/* * hrbeuapple.c * * Created on: 2011-10-10 * Author: bjfuwangzhu */#include<stdio.h>#define nmax 11int num[nmax][nmax]    阅读全文
        
            posted @ 2011-10-10 21:01
qingyezhu
阅读(215)
评论(0)
推荐(0)
        
        
            
        
        
摘要:        
根据错排公式f[n]=(n-1)*(f[n-1]+f[n-2]) f[1]=0,f[2]=1import java.io.BufferedInputStream;import java.math.BigInteger;import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner cin = new Scanner(new BufferedInputStream(System.in)); int n...    阅读全文
        
            posted @ 2011-10-10 20:47
qingyezhu
阅读(229)
评论(0)
推荐(0)
        
        
            
        
        
摘要:        
给定一个数X.1=X0, X1, X2.....Xm = X 是X的因数求一串因数,要求Xi | Xi+1,即上一个因数能整除下一个因数,问这条串就的最长长度,和有多少条这样长度的串.X = p1^a1 * p2^a2 ... pn^anXi =p1^b2 * p2^b2 ...pk^bk... pn^bn,Xi+1 =p1^b2 * p2^b2 ...pk^(bk+1)... pn^bn,要使length最长,只要从1开始,每次只乘以X的一个质因数即可,即length = (a1+a2+...an)而方法数就是X的质因数的重排列数,way = (a1+a2+...an)!/(a1!a2!..    阅读全文
        
            posted @ 2011-10-10 19:04
qingyezhu
阅读(196)
评论(0)
推荐(0)
        
        
            
        
        
摘要:        
/* * hdu1796.c * * Created on: 2011-10-3 * Author: bjfuwangzhu */#include<stdio.h>#define LL long long#define nmax 11int num[nmax], nlen;LL res;int gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b);}void dfs(int start, int c, int lcm, int n) { int i; lcm = lcm / gcd(lcm, num[start...    阅读全文
        
            posted @ 2011-10-10 16:50
qingyezhu
阅读(321)
评论(0)
推荐(0)
        
        
            
        
        
摘要:        
状态转移方程为:num[n][k]=num[n-1][k-1]+num[n-k][k]表示n个Apple分给k个People,1).若k个人不能获得一样的,则为了满足题意,需要将最后一个人先分1个,再将剩余n-1的分给k-1个人;2).若能,则就变成了将n-k个Apple分给k个People的子过程。/* * soj3291.c * * Created on: 2011-10-10 * Author: bjfuwangzhu */#include<stdio.h>#define nmod 10009#define nmax 1010int num[nmax][nmax];void     阅读全文
        
            posted @ 2011-10-10 15:04
qingyezhu
阅读(166)
评论(0)
推荐(0)
        
        
            
        
        
摘要:        
#include<stdio.h>#define nmax 100000int num[nmax];void solve(int n) { int i, j, k, r; for (i = 1, num[0] = 1, k = 0, r = 0; i <= n; i++) { for (j = 0; j <= k; j++) { num[j] = num[j] * i + r; if (num[j] >= nmax) { r = num[j] / nmax; num...    阅读全文
        
            posted @ 2011-10-10 14:35
qingyezhu
阅读(132)
评论(0)
推荐(0)
        
        
            
        
        
摘要:        
由于素数P很小,故先打阶乘的余数表(小于P的所有正数阶乘对P的余数表)。/* * soj3252.c * * Created on: 2011-10-10 * Author: bjfuwangzhu */#include<stdio.h>#define nmod 10007int num[nmod];void init() { int i; for (i = 1, num[0] = 1; i < nmod; i++) { num[i] = num[i - 1] * i % nmod; }}int modular_exp(int a, int b) {...    阅读全文
        
            posted @ 2011-10-10 13:08
qingyezhu
阅读(209)
评论(0)
推荐(0)
        
        
            
        
        
摘要:        
由于素数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
阅读(204)
评论(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号
浙公网安备 33010602011771号