数学概念与方法

本文介绍了数学中的数论概念,包括欧几里得定理、Eratosthenes筛法、扩展欧几里得算法和模算数。此外,还探讨了计数与概率的基础知识,如杨辉三角、二项式定理、计数问题和离散概率的初步概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数论初步

1. 欧几里得定理和唯一分解定理

A.欧几里得定理(即辗转相除法求最大公约数,Euclid algorithm)

算法:gcd();        恒等式:gcd(a, b) =  gcd( b, a %b) ,边界条件 gcd( a, 0)  = a

原理分析: 123456 和 7890 的最大公因数是 6,这可由下列步骤(其中,“a mod b”是指取 a ÷ b 的余数)看出:

a

b

a mod b

123456

7890

5106

7890

5106

2784

5106

2784

2322

2784

2322

462

2322

462

12

462

12

6

12

6

0

函数体:

int gcd (int a, int b){
    return b==0 ? a : gcd(b, a%b);
}

B.唯一分解定理(求最小公倍数)

函数:lcm(a,b)

                                                                            a = p_{1}^{e_{1}}p_{2}^{e_{2}}...p_{r}^{e_{r}}

                                                                            b = p_{1}^{f_{1}}p_{2}^{f_{2}}...p_{r}^{f_{r}}

                                                    gcd(a,b) = p_{1}^{min\left \{e_{1},f_{1} \right \}} p_{2}^{min\left \{e_{2},f_{2} \right \}}... p_{r}^{min\left \{e_{r},f_{r} \right \}}

                                                   lcm(a,b) = p_{1}^{max\left \{e_{1},f_{1} \right \}} p_{2}^{max\left \{e_{2},f_{2} \right \}}... p_{r}^{max\left \{e_{r},f_{r} \right \}}

不难验证,gcd(a,b) * lcm(a,b) = a * b,故  lcm(a,b) = a/gcd(a,b) * b

注意: 先除后乘,先乘后除(即 a*b/gcd(a,b))中 a*b 这一步可能会溢出。

2. Eratosthenes筛法

A. 构造1~n 的素数表。

思想:对于不超过n 的每个非负整数p,删除2p,3p,4p,...,当处理完所有数后,还没有被删除的数就是素数。如果用vis[i]表示i是否被删除,筛选的代码如下:

memset(vis,0,sizeof(vis));
for(int i = 2; i <= n; i++)
    for(int j = i*2; j <= n; j += i)
        vis[j] = 1;

 时间复杂度0(nlogn),允许在很短的时间内得到^{10^{6}}以内的所有素数。

改进

int m = sqrt(n + 0.5);
memset(vis,0,sizeof(vis));
for(int i = 2; i <= m; i++)
{
    if(!vis(i)
    {
        for(int j = i*i; j <= n; j += i)
            vis[j] = 1;
    }
}

B. 素数定理

不超过n的正整数中,素数的个数: ,即和     比较接近,

N10^{2}10^{3}10^{4}10^{5}10^{6}10^{7}10^{8}
\pi \left ( x \right )2516812299592784986645795761455
2214510868686723826204215428681

注意:

质数(prime number)又称素数,有无限个。

质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。附部分素数表如下:

3. 扩展欧几里得算法

算法描述:找出一对整数(x, y),使得 ax + by = gcd(a,b)。其中x, y可以是正数、负数或者0。例如:gcd(6,15) = 3,                  6 * 3 + 15 *(-1) = 3,其中 x = 3, y = -1,这个方程的解可能不唯一。相应代码如下:

void gcd (int a, int b, int &d, int x, int y)
{
    if(!b)
    {
        d = a; x = 1; y = 0;//边界
    }
    else
    {
        gcd(b, a%b, d, y, x);
        y -= x*(a/b);
    }
}

4. 同余与模算数

A. 基础: a mod b 表示a 除以 b 的余数, C语言表达式 a % b 。(b 为正整数,b<0时表达式也合法,但为防止b = 0,此处设b > 0)

则:

  注意: a mod n 可能小于 b mod n ,需要相减后加上n

  注意: a mod n 和 b mod n 相乘后可能超过int 的范围,需要用long long 保存中间结果。

公式三代码:

int mul_mod (int a, int b, int n)
{
    a %= n; b %= n;
    return (int)((long long) a * b % n);
}

B. 大整数取模

输入正整数n和m,输出 n mod m 的值。 n\leqslant 10^{100}m\leqslant 10^{9}

scanf("%s%d",n,&m);
int len = strlen(n);
int ans = 0; 
for(int i = 0; i < len; i++)
    ans = (int)(( (long long) ans*10 + n[i] - '0')%m);
printf("%d\n", ans);

C. 幂取模

输入正整数 a、n和m,输出a^{n} mod \, m的值。a,n,m\leqslant 10^{9}

int pow_mod(int a, int n, int m){
    int ans = 1;
    for(int i = 0; i < n; i++)
        ans = (int)((long long)ans * a % m);
}

该算法的时间复杂度为O(n),当n很大时,速度慢 ,利用分治法改进:

int pow_mod(int a, int n, int m){
    if(n == 0) return 1;
    int x = pow_mod(a, n/2, m);
    long long ans = (long long) x * x % m;
    if(n%2 == 1) ans = ans * a % m;
    return (int)ans;
}

D. 模线性方程组 

记号\equiv表示同余,a\equiv b(mod\, n)含义是“a和b关于模n同余”,即  a\, mod\, n = b\, mod\, n,等价于 a - b 是 n 的整数倍。                     输入正整数 a、 b、n,解方程 ax\equiv b(mod\, n)a,b,n\leqslant 10^{^{9}}。设倍数为y,即求解方程ax-b = ny 解集是一个同余等价类。

计数与概率基础

1. 杨辉三角与二项式定理

A. 基础

 1)加法原理:做一件事情有n个办法,每个办法有p_{i}种方案,则一共有p_{1}+p_{2}+...+p_{n}种方案。                                           2)乘法原理:做一件事情有n个步骤,第i个步骤有p_{i}种方案,则一共有p_{1}p_{2}...p_{n}种方案。                                                         3)容斥原理:当方案归属间之间有交叉时,方案数为                                                                                                                           \left | A\cup B\cup C \right |=\left | A \right |+\left | B \right |+\left | C \right |-\left | A\cap B \right |-\left | B\cap C \right |-\left | B\cap C \right |+\left | A\cap B\cap C \right |   ,                                                                  且并集前的符号规律为:奇数个集合符号为正,偶数个集合符号为负。                                                                                         4)有重复元素的全排列:有k个元素,其中第i个元素有n_{_{i}}个,求全排列个数。                                                                                 分析:                                                                                                                                                                                                    令所有ni之和为n,设所求全排列个数为x,首先做全排列,然后把所有元素编号。其中第s中元素编号为1~ns,由于编号后所有元素均不相同,方案总数为n的全排列数n!,即 n1!n2!n3!...nk!x=n!,再移项,即     x = \frac{n!}{n_{1}!* n_{2}!***n_{k}! }                         5)可重复选择的组合:有n个不同元素,每个元素可以选多次,一共选k个元素,有多少种方法?例如,n = 3 ,k = 2时有6种: (1,1)、(1,2)、(1,3)、(2,2)、(2,3)、(3,3)。                                                                                                             分析:                                                                                                                                                                                                   设第i个元素选x_{i}个,则问题转化为求方程  x_{1}+x_{2}+...+x_{k} = k  的非负整数解的个数。                                                             令y_{i} = x_{i} + 1,则问题转化为求方程y_{1}+y_{2}+...+y_{k} = k + n的正整数解的个数。                                                                     想象k+n个“1”排成一排,则问题等价为:把这些“1”分成n个部分,有多少种分法?                                                                         相当于在k+n-1个“候选分割线”中选n-1个,即                                                                                                                                                                                           C_{k+n-1}^{n-1} = C_{n+k-1}^{k}(a+b)^{n}

B. 杨辉三角

C. 二项式定理

(a+b)^{n}展开,将得到一个关于x的多项式:                                                                                                                                                                                      (a + b)^{0} = 1                                                                                                                                                                                      (a+b)^{1}=a+b                                                                                                                                                                                (a+b)^{2} = a^{2}+2ab+b^{2}                                                                                                                                                                  (a + b)^{3}= a^{3}+3a^{2}b+3ab^{2}+b^{3}                                                                                                                                                    (a+b)^{4} = a^{4}+4a^{3}b+6a^{2}b^{2}+4ab^{3}+b^{4}                                                                                                                                      ......                                                                                                                                                 系数刚好和杨辉三角形一致,一般的,有二项式定理:                                                                                                                                                                        (a+b)^{n}= \sum_{k=0}^{n}C_{n}^{k}a^{n-k}b^{k}                                                                                                                递推公式:                                                                                                                                                                                                                                            C_{n}^{k} = \frac{n-k+1}{k}C_{n}^{k-1}C_{n}^{0} = 1                                                 

D.  输出杨辉三角形

//方法一,时间复杂度o(n^2)
memset(C,0,sizeof(C));
for(int i = 0; i <= n; i++)
{
    C[i][0] = 1;
    for(int j = 0; j <= i; j++)
        C[i][j] = C[i-1][j-1] + C[i-1][j];
}
//方法二:递推公式
memset(C,0,sizeof(C));
for(int i = 0; i <= n; i++)
{
    C[i] = 1;
    for(int j = 0; j <= i; j++)
        C[i] = C[i-1] * (n-i+1)/i;
}

2. 数论中的计数问题

A. 约数的个数。                                                                                                                                                                                       给出正整数n的唯一分解式  n=p_{1}^{a_{1}}p_{2}^{a_{2}}p_{3}^{a_{3}}...p_{k}^{a_{k}} ,求n个正约数的个数。                                                                                         n的任意正约数也只能包含p_{1}p_{2}p_{3}等因子,不会有新的素因子出现。                                                                                         对于n的某个素因子p_{i},它在所求约数的指数可以是0,1,2,...,a_{i}a_{i}+1种情况。                                                                          而且不同的素因子之间相互独立,根据乘法原理,n的正约数个数为:                                                                                                                                         \prod_{i=1}^{k}(a_{i}+1)=(a_{1}+1)(a_{2}+1)(a_{3}+1)...(a_{k}+1)

B. 小于n且与n互素的整数的个数。                                                                                                                                                        给出正整数n个唯一分解式n=p_{1}^{a_{1}}p_{2}^{a_{2}}p_{3}^{a_{3}}...p_{k}^{a_{k}},求1,2,3,...,n中与n互素的数的个数。        

C. 1~n中所有数的欧拉phi函数值。

3. 编码与解码

待续。。。

4. 离散概率初步

A.条件概率     P(A\mid B) = P(AB)\mid P(B)  事件B发生的前提下,事假A发生的概率。                                                                      贝叶斯公式:                                                                                                                                                                                                          P(A|B) = P(B|A)*\frac{P(A)}{P(B)}      

B.全概率公式  样本空间S分成若干个不想交的部分,B_{1}B_{2}...B_{n},则:                                                                                                         P(A) = P(A|B_{1})*P(B_{1})+P(A|B_{2})*P(B_{2})+...+P(A|B_{n})*P(B_{n})

待续。。。

其他

1. 递推

 

2. 数学期望

 

3. 连续概率

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值