埃氏筛:朴素筛法求素数,o(nloglogn)

int prime[N], tot;
bool st[N]; // true:not prime, false:is prime void get_primes(int n)
{
st[1] = true;
for(int i = 2; i <= n; i++)
{
if(!st[i])
{
prime[++tot] = i;
for(int j = i + i; j <= n; j += i) st[j] = true;
}
}
}

欧拉筛:线性筛法求素数,o(n)

int prime[N], tot;
bool st[N]; // true:not prime, false:is prime void get_primes(int n)
{
st[1] = true;
for(int i = 2; i <= n; i++)
{
if(!st[i]) prime[++tot] = i;
for(int j = 1; i * prime[j] <= n; j++)
{
st[i * prime[j]] = true;
if(i % prime[j] == 0) break;
}
}
}

约数个数 & 约数之和

如果 N = p1c1 * p2c2 * p3c3 * ... * pkck 

约数个数:cnt = ( c1 + 1 ) * ( c2 + 1 ) * ( c3 + 1 ) * ... * ( ck + 1 )

unordered_map<int, int> primes;

int cal(int x)
{
//分解质因数
for(int i = 2; i*i <= x; i++)
if(x % i == 0) while(x % i == 0) primes[i] ++, x /= i;
if(x > 1) primes[x] ++;
//计算约数个数
int cnt = 1;
for(auto p : primes) cnt = cnt * (p.second + 1) % mod;
return cnt;
}

约数之和:sum = ( p10 + p11 + ... + p1c1 ) * ... * ( pk0 + pk1 + ... + pkck )

unordered_map<int, int> primes;

int cal(int x)
{
//分解质因数
for(int i = 2; i*i <= x; i++)
if(x % i == 0) while(x % i == 0) primes[i] ++, x /= i;
if(x > 1) primes[x] ++;
//计算约数之和
int sum = 1;
for(auto p : primes)
{
int a = p.first, b = p.second;
int res = 1;
while(b--) res = (res * a + 1) % mod;
sum = sum * res % mod;
}
return sum;
}

欧几里得算法:求最大公约数

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

快速幂:快速求某数的次幂

int qmi(int m, int k, int p)
{
int res = 1 % p;
while(k)
{
if(k&1) res = res * m % p;
m = m * m % p;
k >>= 1;
}
return res;
}

欧拉函数:φ(n):小于或等于n的正整数中与n互质的数的数目

设 N = p1c1 * p2c2 * p3c3 * ... * pkck  

则 φ(N) = N * ( 1 - 1/p1 ) * ( 1 - 1/p2 ) * ( 1 - 1/p3 ) * ... * (1 - 1/pk )

朴素算法:o(n1/2) // n为所求数的大小

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

筛法求欧拉函数:o(n) // n为求欧拉函数的数的个数

int primes[N], tot, euler[N];
bool st[N]; void get_euler(int n)
{
euler[1] = 1;
for(int i = 2; i <= n; i++)
{
if(!st[i])
{
primes[++tot] = i;
euler[i] = i - 1;
}
for(int j = 1; i * primes[j] <= n; j++)
{
int t = i * primes[j];
st[t] = true;
if(i % primes[j] == 0)
{
euler[t] = euler[i] * primes[j];
break;
}
// euler[t] = euler[i] * primes[j] * (1 - 1/primes[j])
euler[t] = euler[i] * (primes[j] - 1);
}
}
}

欧拉定理:若a、p为正整数,且互素,则aφ(p) ≡ 1 (mod p)

用欧拉定理直接求乘法逆元的代码量较大且时间复杂度较高,不太建议。

费马小定理:若a、p为正整数,且p为素数,则ap-1 ≡ 1 (mod p) (欧拉定理的特殊情况)

故当满足以上条件时(模数p为素数),可用费马小定理结合快速幂求乘法逆元:

int qmi(int m, int k, int p)
{
int res = 1 % p;
while(k)
{
if(k&1) res = res * m % p;
m = m * m % p;
k >>= 1;
}
return res;
} int inv(int a, int p)
{
return qmi(a, p-2, p);
}

裴蜀定理

对于任意正整数a、b,一定存在整数x、y,使得 ax + by = gcd(a, b)

并且假设有ax0 + by0 = gcd(a, b),

则有通解:x = x0 + K·(b/d),y = y0 - K·(a/d) ( d = gcd(a, b),K ∈ Z ) .

其中,求解x0、y0的构造见扩展欧几里得算法

扩展欧几里得算法:求x, y,使得ax + by = gcd(a, b)

int exgcd(int a, int b, int &x, int &y)
{
if (!b)
{
x = 1; y = 0;
return a;
}
int d = exgcd(b, a % b, y, x);
y -= (a/b) * x;
return d;
}

应用:解线性同余方程、求乘法逆元

// 拓展欧几里得算法求逆元
int exgcd(int a, int b, int &x, int &y)
{
if (!b)
{
x = 1; y = 0;
return a;
}
int d = exgcd(b, a % b, y, x);
y -= (a/b) * x;
return d;
} int inv(int a, int p)
{
int x, y;
int g = exgcd(a, p, x, y);
return g != 1 ? -1 : (x % p + p) % p; //返回-1表示乘法逆元不存在
}

约瑟夫问题

n 个人标号0~n-1,逆时针站一圈。从0号开始,每一次从当前的人逆时针数k个,然后让这个人出局。问最后剩下的人是谁。

  线性算法:

int josephus(int n, int k)
{
int res = 0;
for(int i = 1; i <= n; i++) res = (res + k) % i;
return res; //若编号从1开始则res+1, 从0开始则不需要
}

欧拉降幂

  

基础数学知识 / Math(updating)的更多相关文章

  1. Python之基础数学知识

    一.线性代数 1.求转置 import numpy m = numpy.mat([[1, 2], [3, 4]]) print("Matrix.Transpose:") print ...

  2. 【基础数学知识】UVa 11314 - Hardly Hard

    Problem H HARDLY HARD You have been given the task of cutting out a quadrilateral slice of cake out ...

  3. 一些有用的数学知识(Updating)

    文章目录 拉格朗日插值公式 微分中值定理 费马引理 拉格朗日中值定理 柯西中值定理 洛必达法则 连分数(NOI2021 D2T2 考点) 定义 结论 定理1 定理2 定理3 定理4 定理5 欧拉公式 ...

  4. HTML5 Canvas核心技术图形动画与游戏开发(读书笔记)----第一章,基础知识

    一,canvas元素 1 为了防止浏览器不支持canvas元素,我们设置“后备内容”(fallback content),下面紫色的字即为后备内容 <canvas id="canvas ...

  5. js生成[n,m]的随机数,js如何生成随机数,javascript随机数Math.random()

    一.预备知识 Math.ceil();  //向上取整. Math.floor();  //向下取整. Math.round();  //四舍五入. Math.random();  //0.0 ~ 1 ...

  6. HTML5中手势原理分析与数学知识的实践

    摘要:在这触控屏的时代,人性化的手势操作已经深入了我们生活的每个部分.现代应用越来越重视与用户的交互及体验,手势是最直接且最为有效的交互方式,一个好的手势交互,能降低用户的使用成本和流程,大大提高了用 ...

  7. unity3d 数学的数学基础和辅助类

    转载注明smartdot:http://my.oschina.net/u/243648/blog/67193 1.  数学(点乘/叉乘)/unity3d的数学辅助类 2.  坐标系统(本地/世界/屏幕 ...

  8. 《Deep Learning》(深度学习)中文版 开发下载

    <Deep Learning>(深度学习)中文版开放下载   <Deep Learning>(深度学习)是一本皆在帮助学生和从业人员进入机器学习领域的教科书,以开源的形式免费在 ...

  9. Cocos2d-x视频教程

    目录 1. 我的技术专栏 2. 相关推荐 3. 下载链接 4. cocos2d-xx Lua+JS+C++教学视频 5. 杨丰盛Cocos2D-X游戏课程 6. [Cocos2d-x]塔防游戏开发实战 ...

随机推荐

  1. 『现学现忘』Git基础 — 20、Git中忽略文件补充

    目录 1.忽略文件常遇到的问题 2.忽略文件配置优先级 3.忽略已跟踪文件的改动(本机使用) 4.autocrlf和safecrlf参数说明 (1)提出问题 (2)autocrlf说明 (3)safe ...

  2. 重新审视C# Span<T>数据结构

    先谈一下我对Span的看法, span是指向任意连续内存空间的类型安全.内存安全的视图. Span和Memory都是包装了可以在pipeline上使用的结构化数据的内存缓冲器,他们被设计用于在pipe ...

  3. Apache Struts 2 漏洞汇总

    Apache Struts2 是一个基于MVC设计模式的Web应用框架,会对某些标签属性(比如 id)的属性值进行二次表达式解析,因此在某些场景下将可能导致远程代码执行. Struts2特征: 通过页 ...

  4. java高级用法之:JNA中的Structure

    目录 简介 native中的struct Structure 特殊类型的Structure 结构体数组作为参数 结构体数组作为返回值 结构体中的结构体 结构体中的数组 结构体中的可变字段 结构体中的只 ...

  5. 【Azure Redis 缓存】 Python连接Azure Redis, 使用redis.ConnectionPool 出现 "ConnectionResetError: [Errno 104] Connection reset by peer"

    问题描述 Python连接Azure Redis, 使用redis.ConnectionPool 出现 "ConnectionResetError: [Errno 104] Connecti ...

  6. K8S面试应知必回

    目录 面试不要不懂装懂,不会就是不会,不可能每个人都接触过所有的知识! 1. 基础问题 1.1 Service是怎么关联Pod的?(课程Service章节) 1.2 HPA V1 V2的区别 1.3 ...

  7. Redis设计与实现3.3:集群

    集群 这是<Redis设计与实现>系列的文章,系列导航:Redis设计与实现笔记 集群中的节点 创建集群 通过 CLUSTER NODE 命令可以查看当前集群中的节点.刚启动时,默认每一台 ...

  8. 通过Swagger接口导出模板文件时报错:URL.createObjectURL: Argument 1 is not valid for any of the 1-argument overloads.

    问题描述:通过Swagger接口导出Excel模板文件时,报错:URL.createObjectURL: Argument 1 is not valid for any of the 1-argume ...

  9. Linux常用命令(超详细)

    一.基本命令 1.1 关机和重启 关机 shutdown -h now 立刻关机 shutdown -h 5 5分钟后关机 poweroff 立刻关机 重启 shutdown -r now 立刻重启 ...

  10. 113_Power Pivot 销售订单之重复购买率及购买间隔天数相关

    博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 1.背景 在论坛中看到朋友在提复购率(重复购买率)等相关问题,今天把结果贴出来. 问题原贴:计算订单中的老顾客复购率 感谢 ...