本文的所有内容模板都来自于y总

目录

  • 试除法判定质数
  • 试除法分解质因数
  • 朴素筛法求素数
  • 埃氏筛法求素数
  • 线性筛法
  • 试除法求所有约数
  • 约数个数和约数之和
  • 欧几里得算法
  • 求欧拉函数
  • 筛法求欧拉函数 【不熟】
  • 快速幂
  • 扩展欧几里得算法
  • 中国剩余定理 【未解决】
  • 高斯消元 【不熟】
  • 求组合数 【不熟】
  • 容斥定理 【不熟】
  • 博弈论【不会】

试除法判定质数

866. 试除法判定质数
时间复杂度是根号n

bool is_prime(int x)
{if (x < 2) return false;for (int i = 2; i <= x / i; i ++ )if (x % i == 0)return false;return true;
}

试除法分解质因数

867. 分解质因数
时间复杂度是 logn 到根号n 之间

void divide(int x)
{for (int i = 2; i <= x / i; i ++ )if (x % i == 0){int s = 0;while (x % i == 0) x /= i, s ++ ;cout << i << ' ' << s << endl;}if (x > 1) cout << x << ' ' << 1 << endl;  //这是说明结果是 类似于 86 =2*43   43不可再分了这种情况cout << endl;
}

朴素筛法求素数

时间复杂度: O(nlogn)

int primes[N], cnt;     // primes[]存储所有素数
bool st[N];         // st[x]存储x是否被筛掉void get_primes(int n)
{for (int i = 2; i <= n; i ++ ){if (st[i]) continue;primes[cnt ++ ] = i;for (int j = i + i; j <= n; j += i)st[j] = true;}
}

埃氏筛法求素数

时间复杂度: O(nloglogn)

int  cnt;     // 存储素数个数
bool hush[N];         // st[x]存储x是否被筛掉
for(int i=2;i<=n;i++){if(!hush[i]){cnt++;for(int j=i+i;j<=n;j+=i) hush[j]=true;}}

线性筛法

868. 筛质数
你会发现: 用埃氏筛法的话,有一些数是筛了多遍的。
例: 6 用 2筛过一遍,用3又筛过一遍。

那么线性筛法就来了,它对于每一个数都只筛一遍是线性的,当要筛的数特别多的时候。
线性筛法几乎快埃氏筛法一倍的速度。
下面的总结来自于: Acwing的评论区,我从中摘抄了里面的精华。
线性筛法的原理:

  • 核心:1~n内的合数只会被其最小质因子筛掉.
  • 原理:1~n之内的任何一个合数一定会被筛掉,而且筛的时候只用最小质因子来筛,
    然后每一个数都只有一个最小质因子,因此每个数都只会被筛一次,因此线性筛法是线性的.
int primes[N], cnt;     // primes[]存储所有素数
bool st[N];         // st[x]存储x是否被筛掉void get_primes(int n)
{for (int i = 2; i <= n; i ++ ){if (!st[i]) primes[cnt ++ ] = i;for (int j = 0; primes[j] <= n / i; j ++ ){st[primes[j] * i] = true;if (i % primes[j] == 0) break;}}
}

关于线性筛的解释:
枚举到i的最小质因子的时候就会停下来,即”if(i%primes[j]==0) break;”。
因为从小到大枚举的所有质数,所以当”i%primes[j]!=0”时,primes[j]一定小于i的最小质因子,
primes[j]一定是primes[j]i的最小质因子.
因为是从小到大枚举的所有质数,所以当”i%primes[j]==0”时,primes[j]一定是i的最小质因子,
而primes[j]又是primes[j]的最小质因子,因此primes[j]是iprimes[j]的最小质因子.
关于for循环的解释:
注:首先要把握住一个重点:我们枚举的时候是从小到大枚举的所有质数

  • 1.当i%primes[j]==0时,因为是从小到大枚举的所有质数,所以primes[j]就是i的最小质因子,而primes[j]又是其本身
    primes[j]的最小质因子,因此当i%primes[j]==0时,primes[j]是primes[j]i的最小质因子.
  • 2.当i%primes[j]!=0时,因为是从小到大枚举的所有质数,且此时并没有出现过有质数满足i%primes[j]==0,
    因此此时的primes[j]一定小于i的最小质因子,而primes[j]又是其本身primes[j]的最小质因子,
    所以当i%primes[j]!=0时,primes[j]也是primes[j]i的最小质因子.
  • 3.综合1,2得知,在内层for循环里面无论何时,primes[j]都是primes[j]i的最小质因子,因此”st[primes[j]i]=true”
    语句就是用primes[j]i这个数的最小质因子来筛掉这个数.

for (int j = 0; primes[j] <= n / i; j ++)不需要写成 for (int j = 0; j < cnt && primes[j] <= n / i; j ++)理由:
如果 i 是合数,那它有最小质因子 prime[j],所以循环会在枚举到 prime[j] 时 break 掉;
如果 i 是质数,则由于上面刚把 i 加到了 primes 数组中,所以 prime[j] 枚举到最后一个时正好等于 i,
所以也会 break 掉。因此 j 不会大于等于当前的 cnt

试除法求所有约数

869. 试除法求约数

vector<int> get_divisors(int x)
{vector<int> res;for (int i = 1; i <= x / i; i ++ )if (x % i == 0){res.push_back(i);if (i != x / i) res.push_back(x / i);//避免  36  6*6 进入2个6的情况}sort(res.begin(), res.end());return res;
}

约数个数和约数之和

870. 约数个数
871. 约数之和

如果 N = p1^c1 * p2^c2 * ... *pk^ck
约数个数: (c1 + 1) * (c2 + 1) * ... * (ck + 1)
约数之和: (p1^0 + p1^1 + ... + p1^c1) * ... * (pk^0 + pk^1 + ... + pk^ck)

约数个数公式的解析:

约数之和公式解析:

欧几里得算法

872. 最大公约数

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

求欧拉函数


873. 欧拉函数

int phi(int x)
{int res = x;for (int i = 2; i <= x / i; i ++ )if (x % i == 0){res = res / i * (i - 1);while (x % i == 0) x /= i;}if (x > 1) res = res / x * (x - 1);return res;
}

筛法求欧拉函数 【不熟】

874. 筛法求欧拉函数

int primes[N], cnt;     // primes[]存储所有素数
int euler[N];           // 存储每个数的欧拉函数
bool st[N];         // st[x]存储x是否被筛掉void get_eulers(int n)
{euler[1] = 1;for (int i = 2; i <= n; i ++ ){if (!st[i]){primes[cnt ++ ] = i;euler[i] = i - 1;}for (int j = 0; primes[j] <= n / i; j ++ ){int t = primes[j] * i;st[t] = true;if (i % primes[j] == 0){euler[t] = euler[i] * primes[j];break;}euler[t] = euler[i] * (primes[j] - 1);}}
}

快速幂

875. 快速幂
876. 快速幂求逆元
迭代法:

求 m^k mod p,时间复杂度 O(logk)。int qmi(int m, int k, int p)
{int res = 1 % p, t = m;while (k){if (k&1) res = res * t % p;t = t * t % p;k >>= 1;}return res;
}

递归法:

#include<cstdio>
#include<iostream>
using namespace std;
typedef long long int ll;
ll f(ll a,ll b,ll c)
{if(!b) return 1;ll res=f(a,b>>1,c);if(b&1) return a*res%c*res%c;else return res*res%c;
}
int main(void)
{int n; scanf("%d",&n);while(n--){ll a,b,c; scanf("%lld%lld%lld",&a,&b,&c);cout<<f(a,b,c)<<endl;}return 0;
}

扩展欧几里得算法

877. 扩展欧几里得算法
878. 线性同余方程

中国剩余定理 【未解决】

204. 表达整数的奇怪方式

高斯消元 【不熟】

883. 高斯消元解线性方程组
884. 高斯消元解异或线性方程组

求组合数 【不熟】

885. 求组合数 I
886. 求组合数 II
887. 求组合数 III
888. 求组合数 IV
AcWing 889. 满足条件的01序列 【卡特兰数】

容斥定理 【不熟】

890. 能被整除的数

博弈论【不会】

891. Nim游戏
892. 台阶-Nim游戏
893. 集合-Nim游戏
894. 拆分-Nim游戏

第四章 数学知识【完结】相关推荐

  1. 算法基础课——第四章 数学知识(三)

    第四章 数学知识(三) 如无特殊说明,所有数均为正整数. 高斯消元 高斯消元是用来解方程的,可以在 O(n3)O(n^3)O(n3)​ 时间复杂度内求解一个 nnn 个方程 nnn 个未知数 的多元线 ...

  2. 算法基础课——第四章 数学知识(一)

    第四章 数学知识(一) 如无特殊说明,所有数均为正整数 质数 质数: 针对所有大于 111​​​ 的自然数来说,如果只包含 111​​ 和本身 这两个约数,就被称为质数,或者叫素数:否则被称为 合数. ...

  3. 第四章 数学知识 质数相关

    1.质数判定 1. 问题解释 所谓质数判定,就是给定一个数,判断一下该数是否为质数. 质数(Prime number),又称素数,指在大于1的自然数中,除了1和该数自身外,无法被其他自然数整除的数(也 ...

  4. 数学:确定性的丧失---第十四章 数学向何处去

    发信人: paradax (秀树*冬眠中...), 信区: Philosophy 标  题: 数学:确定性的丧失(15) 发信站: 北大未名站 (2002年10月23日22:40:41 星期三), 转 ...

  5. AcWing基础算法课Level-2 第四讲 数学知识

    AcWing基础算法课Level-2 第四讲 数学知识 您将学会以下数学名词 质数,试除法,埃式筛法,线性筛,辗转相除,算术基本定理,质因数分解,欧拉函数,快速幂,费马小定理,逆元,拓展欧几里得,一次 ...

  6. 软件设计师考试 | 第四章 操作系统知识 | 文件管理

    文章目录 (一)文件与文件系统 1.文件 2.文件系统 3.文件的类型 (二)文件的结构和组织 1.文件的逻辑结构 2.文件的物理结构 (三)文件目录 1.文件控制块 2.目录结构 (四)存取方法和存 ...

  7. 04741计算机网络原理2018年版-第四章 网络层 知识要点

    知识点总结 一.网络层服务 标记: 1. 网络层服务 网络层介于传输层和数据链路层之间,传输层提供端到端的进程间通信服务,数据链路层的功能是实现物理链路直接相连的两个节点之间的数据帧传输服务,网络层关 ...

  8. 算法基础课-数学知识

    数学知识 第四章 数学知识 数论 质数 约数 欧拉函数 欧拉定理与费马小定理 拓展欧几里得定理 裴蜀定理 中国剩余定理 快速幂 高斯消元 求组合数 卡特兰数 容斥原理 博弈论 Nim游戏 SG函数 第 ...

  9. 数学脱式计算在线计算机,四年级数学脱式计算练习400题

    北京市朝阳区2016-2017学年度第一学期期末统一考试 高三年级语文试卷 (考试时间150分钟满分150分) 2017.1 本试卷 ... 必修4 必修4英语组:方玲 Unit 1 1. achie ...

最新文章

  1. thinkpad风扇声音大_笔记本风扇声音很大怎么解决
  2. python两条曲线图片相似度_Python比较两个图片相似度的方法
  3. ACM中java的使用 (转)
  4. vscode设置终端字体大小
  5. 独家下载!《零售数据中台通关指南》,带你玩转新零售
  6. php 留言板分页显示,php有分页的留言板,留言成功后怎么返回当前页?
  7. IoT---(1) 窄带物联网NB-IoT协议必须要了解的几个问题
  8. 【Kafka】消息超过最大值限制max.request.size
  9. 傅立叶变换,时域,频域二
  10. 未来-IOT-Aliyun:阿里云 IOT - 开发者社区
  11. Function.prototype.bind、call与apply方法简介
  12. Eclipse 无法打开Console,show view无效
  13. PS如何给图片加简单的边框线
  14. lol英雄皮肤图片爬取
  15. 应有尽有,Python 程序员需要掌握的机器学习“四大名著”发布啦
  16. django memery cache
  17. cmake依赖ffmpeg库(x264)错误
  18. cad相对坐标快捷键_cad角度快捷键(cad角度命令怎么输入)
  19. SUS系统可用性量表
  20. 怎么去掉ECShop购物流程中收货人电子邮箱必填

热门文章

  1. numpy reshape resize用法
  2. Angular2.0 基础: Form
  3. c#FileStream文件读写(转)
  4. 春天里:丁丁与赵亚楠
  5. 基于用户评价的评分模型
  6. size/resize与 capacity/reserve
  7. Linux之解析鼠标input事件数据
  8. 理解linux虚拟文件系统VFS - 概述
  9. Linux kernel 学习笔记(1) --分段分页保护机制
  10. (chap6 Http首部) 请求首部字段 Max-ForwardsProxy-Authorization Range