10.2计数与概率基础

1.加法原理:

做一件事有n种方法,第i个步骤有pi种方案,则一共有p1+p2+……+pn种方案

2.乘法原理:

做一件事,完成它需要分成n个步骤,做第一 步有m1种不同的方法,做第二步有m2不同的方法,……,做第n步有mn不同的方法。那么完成这件事共有 N=m1×m2×m3×…×mn 种不同的方法。 和加法原理是数学概率方面的基本原理。

3.容斥原理:

在计数时,必须注意无一重复,无一遗漏。为了使重叠部分不被重复计算,人们研究出一种新的计数方法,这种方法的基本思想是:先不考虑重叠的情况,把包含于某内容中的所有对象的数目先计算出来,然后再把计数时重复计算的数目排斥出去,使得计算的结果既无遗漏又无重复,这种计数的方法称为容斥原理。

A∪B∪C = A+B+C - A∩B - B∩C - C∩A + A∩B∩C

4.有重复元素的全排列:

【描述】有k个元素,第i个元素有ni个,求全排列的个数

【分析】

5.可重复选择的组合:

【描述】

【分析】

6.杨辉三角和二项式定理:

杨辉三角

7.数论中的计数问题:

①约数的个数:
②小于n且与n互素的整数个数(欧拉函数):
【描述】给出正整数n的唯一分解式n = p1^a1*p2^a2*p3^a3*p4^a4*……pk^ak,求小于n的数中与n互素的个数
【分析】对于素数p来说,“与p互素”和“不是p的倍数”等价。利用容斥原理,n - “p1,p2,……,pk的倍数的个数” + “同时是两个素因子的倍数”的个数 - “同时是三个素因子的倍数”…………………………
【唯一分解式的求得】
(1)利用试除法依次判断√n内所有素数是否有n的因子(需要打素数表)
(2)在 √n每次找到一个素因子把他除干净(巧用break),自己虽然用了很长时间这个思路,但是还是LRJ的代码写得好:
    int m = (int)sqrt(m + 0.5);
    int ans = n;
    for(int i = 2;i <= m;i++)
        if(n % i == 0)  //寻找素因子
        {
            ans = ans / i * (i - 1);
            while(n % i == 0) n /= i;  //抓住一个素因子就除尽它
        }
    if(n > 1) ans = ans / n * (n - 1);

【欧拉函数】(咋变形的?)
n = p_1^{k_1} p_2^{k_2} \cdots p_r^{k_r}
\varphi(n) = \prod_{i=1}^r p_i^{k_i-1}(p_i-1) = \prod_{p\mid n} p^{\alpha_p-1}(p-1) = n\prod_{p|n}\left(1-\frac{1}{p}\right)
其中 \alpha_p 是使得 p^{\alpha} 整除 n 的最大整数 \alpha (这里 \alpha_{p_i} = k_i )。


【代码】求1~n中所有数的欧拉phi函数值
    //类似于筛选法求素数
    int n,phi[100005];cin>>n;
    memset(phi,0,sizeof(phi));
    phi[1] = 1;
    for(int i = 2;i <= n;i++)
        if(!phi[i])
            for(int j = i;j <= n;j += i)
            {
                if(!phi[j]) phi[j] = j;
                phi[j] = phi[j] / i * (i - 1);
            }
    for(int i = 1;i <= n;i++) printf("%d\n",phi[i]);

8.编码与解码:






  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值