保研考研机试攻略:第三章——数学(3)

🍦🍦🍦今天我们继续来看数学的最后一部分,感谢大家对该专栏的支持,我会继续努力学习更新的,期待大家与我共同进步,我们一起拿捏机试~~~

目录

[🧊🧊🧊3.8 二分快速幂](#🧊🧊🧊3.8 二分快速幂)

[🥥例题:DreamJudge 1017](#🥥例题:DreamJudge 1017)

[🧊🧊🧊3.9 常见数学公式总结](#🧊🧊🧊3.9 常见数学公式总结)

错排公式

海伦公式

组合数公式

两点之间的距离公式

扇形面积

卡特兰数

[🧊🧊🧊3.10 规律神奇OEIS](#🧊🧊🧊3.10 规律神奇OEIS)

[🥥例题:DreamJudge 1479](#🥥例题:DreamJudge 1479)


🧊🧊🧊3.8 二分快速幂

有一类题目是这样的:求 (x^y) % p

当 y 很大的时候,我们不能直接用for循环一个一个乘,因为这样的方法复杂度是 O(N)。

遇到这类问题的时候,我们可以使用二分快速幂的方法来求解。

举个例子:3^7 = 3^4 * 3^2 *3^1

首先我们要知道,对于任意一个数 s,它的二进制代表了它可以由 2 的次幂的累加和来表示。

比如 7 的二进制是 111,那么它就是说 7 = 2^2 + 2^1 + 2^0 ;再比如一个数 12 的二进制是 1101 13 = 2^3 + 2^2 + 2^0

所以对于任意一个 x^y,我们都可以将 y 分解成 2 的幂次的形式,例如 5^13 = 5^8 * 5^4 * 5^1

这样做的好处是:1..2..4..8..16..32..64..128........1024.....

1、每一个数都是它前一个数的 2 倍

2、它的迭代速度超级快

🥥例题:DreamJudge 1017

运用上面讲的二分快速幂和同余模定理即可。

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll mod_pow(ll x, ll y, ll mod) {
    ll res = 1;
    while (y > 0) {
        //如果二进制最低位为 1、则乘上 x^(2^i)
        if (y & 1) res = res * x % mod;
        x = x * x % mod; // 将 x 平方
        y >>= 1;
    }
    return res;
}
int main() {
    ll x, n;//注意 x*x 会超出 int 范围
    scanf("%lld%lld", &x, &n);
    printf("%lld\n", mod_pow(x, n, 233333));
    return 0;
}

🧊🧊🧊3.9 常见数学公式总结

错排公式

问题: 十本不同的书放在书架上。现重新摆放,使每本书都不在原来放的位置。有几种摆法?

递推公式为:D(n) = (n - 1) * [D(n - 1) + D(n - 2)]

海伦公式

S = sqrt(p * (p - a) * (p - b) * (p - c))

公式描述:公式中 a,b,c 分别为三角形三边长,p 为半周长,S 为三角形的面积。

组合数公式

公式描述:

组合数公式是指从 n 个不同元素中,任取 m(m≤n)个元素并成一组,叫做从 n 个不同元素中取出 m 个元素的一个组合。

两点之间的距离公式

公式描述:公式中(x1,y1),(x2,y2)分别为 A、B 两个点的坐标。

扇形面积

S=1/2×弧长×半径,S 扇=(n/360)πR²

卡特兰数

原理

令 h(0)=1,h(1)=1,catalan 数满足递归式:

(其中 n>=2)

另类递推公式:

该递推关系的解为:

(n=1,2,3,...)

卡特兰数的应用实质上都是递归等式的应用

前几项为:1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900,2674440, 9694845, 35357670, 129644790, 477638700, 1767263190, 6564120420, 24466267020, 91482563640, 343059613650, 1289904147324, 4861946401452, ...

所有的奇卡塔兰数 Cn 都满足 n = 2^k-1、所有其他的卡塔兰数都是偶数

应用

  1. 12 个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少种?
  2. 括号化问题。矩阵链乘: P=A1×A2×A3×......×An,依据乘法结合律,不改变其顺序,只用括号表示成对的乘积,试问有几种括号化的方案?
  3. 将多边行划分为三角形问题。将一个凸多边形区域分成三角形区域(划分线不交叉)的方法数?
  4. 出栈次序问题。一个栈(无穷大)的进栈序列为 1、2、3、...、n,有多少个不同的出栈序列?
  5. 通过连结顶点而将 n + 2 边的凸多边形分成三角形的方法个数。
  6. 所有在 n*n 格点中不越过对角线的单调路径的个数。
  7. 有 n+1 个叶子的二叉树的个数。

更多的变化不胜枚举,遇到这类规律题建议使用下一节讲的 OEIS 来解决问题。

🧊🧊🧊3.10 规律神奇OEIS

使用OEIS,你可以飞快解出那些所谓推公式的规律难题,但是需要进入网站才可,所以如果考试不允许切换网页就不要用这种方法了。

它的网址:http://oeis.org/

只要你输入前几项,它就可以给你找出规律来,并且自动给你推出公式。所以对于找规律的题目,你只需要手动计算出前几项的值,或者暴力打表求出前几项的值,然后输入 OEIS,他就可以告诉你公式是什么。

接下来,我们就用这个神器来练练手~

🥥例题:DreamJudge 1479

对于这类让我们去找有多少种情况的题目,第一反应就是他是有规律的,它的规律可能简单,也可能很难。这时候我们先推出它的前几项值,n 为 1 时答案等于 1,n 为 2 时答案等于 2,n 为 3 时答案等于 3,n 为 4 时答案等于 5。然后我们将这前几项值 1,2,3,5 输入到OEIS 中,它立马告诉我们这个规律是斐波那契数列,f[i]=f[i-1]+f[i-2]。

cpp 复制代码
#include <stdio.h>
long long f[10005] = {0};
int main(){
    int n;
    scanf("%d", &n);
    f[0] = 1; f[1] = 1;
    for (int i = 2; i <= n; i++) {
        f[i] = f[i-1] + f[i-2];
        f[i] %= 2333333;
    }
    printf("%lld\n", f[n]);
    return 0;
}

创作不易,点个赞吧~点赞收藏不迷路,感兴趣的宝子们欢迎关注该专栏~

勤奋努力的宝子们,学习辛苦了!🌷🌷🌷休息下,我们下部分再见👋( •̀ ω •́ )✧~

相关推荐
XiaoLeisj5 分钟前
【递归,搜索与回溯算法 & 综合练习】深入理解暴搜决策树:递归,搜索与回溯算法综合小专题(二)
数据结构·算法·leetcode·决策树·深度优先·剪枝
yuyanjingtao19 分钟前
CCF-GESP 等级考试 2023年9月认证C++四级真题解析
c++·青少年编程·gesp·csp-j/s·编程等级考试
Jasmine_llq24 分钟前
《 火星人 》
算法·青少年编程·c#
闻缺陷则喜何志丹35 分钟前
【C++动态规划 图论】3243. 新增道路查询后的最短距离 I|1567
c++·算法·动态规划·力扣·图论·最短路·路径
charlie1145141911 小时前
C++ STL CookBook
开发语言·c++·stl·c++20
Lenyiin1 小时前
01.02、判定是否互为字符重排
算法·leetcode
Laofanqie6661 小时前
电脑丢失bcrypt.dll文件是什么原因?找不到bcrypt.dll文件修复办法来啦!
经验分享·电脑
小林熬夜学编程1 小时前
【Linux网络编程】第十四弹---构建功能丰富的HTTP服务器:从状态码处理到服务函数扩展
linux·运维·服务器·c语言·网络·c++·http
亦世凡华、1 小时前
MySQL--》如何在MySQL中打造高效优化索引
数据库·经验分享·mysql·索引·性能分析