数学部分学习

1、欧拉函数

  • 计算单个值的欧拉函数

    • 基于公式:$phi(n) = n* \frac{p_1-1}{p_1} * \frac{p_2-1}{p_2}*\dots *\frac{p_n-1}{p_n} 其中 其中 其中p_i 为 为 n$的质因数。
    • 写代码用试除法可以快速求解 O ( s q r t ( n ) ) O(sqrt(n)) O(sqrt(n))
  • 筛法求欧拉函数(线性筛)

    • 代码如下:
    for i in range(2,n+1):if st[i]==0:primes.append(i)phi[i]=i-1 # 质数的phi(i)=i-1for j in range(len(primes)):if primes[j]*i>n:breakst[primes[j]*i]=1if i%primes[j]==0:phi[i*primes[j]] = phi[i]*primes[j] # primes[j]是i的质因素数breakphi[i*primes[j]] = phi[i]*(primes[j]-1) # primes[j]不是i的质因数
    
  • 欧拉降幂

    • 基本公式
      a b ≡ { a b m o d φ ( m ) , g c d ( a , m ) = 1 , a b , g c d ( a , m ) ≠ 1 , b < φ ( m ) , ( m o d m ) a ( b m o d φ ( m ) ) + φ ( m ) , g c d ( a , m ) ≠ 1 , b ≥ φ ( m ) . a^b \equiv \begin{cases} a^{b \ mod \ \varphi(m)}, \ \ \ \ \ \ \ \ \ \ \ \ \ gcd(a,m)=1, \\ a^b, \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ gcd(a,m) \not=1,b<\varphi(m),\ \ \ \ (mod \ \ m)\\ a^{(b \ mod \ \varphi(m)) + \varphi(m)}, \ \ gcd(a,m) \not =1,b\ge \varphi(m). \end{cases} ab ab mod φ(m),             gcd(a,m)=1,ab,                          gcd(a,m)=1,b<φ(m),    (mod  m)a(b mod φ(m))+φ(m),  gcd(a,m)=1,bφ(m).

2、乘法逆元

  • 费马小定理求逆元

    • p o w ( a , p , p − 2 ) pow(a,p,p-2) pow(a,p,p2)
  • 扩展欧几里得算法求逆元

    • e x g c d ( a , p , x , y ) exgcd(a,p,x,y) exgcd(a,p,x,y)
    • 如果求得最大公约数不是1则无解,否则逆元就是 x x%p x
    def exgcd(a,b,x,y):if b==0:return a,1,0d,x,y = exgcd(b,a%b,x,y)x,y = y,x-a//b*yreturn d,x,y
    

3、中国剩余定理

  • C R T CRT CRT中国剩余定理基本形式

    • 中国剩余定理给出了以下的一元线性同余方程组的解:

    { x ≡ a 1 ( m o d m 1 ) x ≡ a 2 ( m o d m 2 ) ⋮ x ≡ a n ( m o d m n ) \begin{cases} x \equiv a_1 \pmod{m_1} \\ x \equiv a_2 \pmod{m_2} \\ \qquad \vdots \\ x \equiv a_n \pmod{m_n} \end{cases} xa1(modm1)xa2(modm2)xan(modmn)

    • 在中国剩余定理中: a 1 , a 2 , … , a n a_1, a_2, \ldots, a_n a1,a2,,an 是给定的余数, m 1 , m 2 , … , m n m_1,m_2,\ldots,m_n m1,m2,,mn两两互质,如果两两不互质则是扩展中国剩余定理。
  • C R T CRT CRT问题的解决方法

    • CRT主要利用 m 1 , m 2 , … , m n m_1,m_2,\dots,m_n m1,m2,,mn 为两两互质的整数的性质。我们可以令:
      M = m 1 × m 2 × ⋯ × m n = ∏ i = 1 n m i M i = M / m i M=m_1 \times m_2 \times \dots \times m_n = \begin{equation} \prod_{i=1}^{n}m_i \end{equation}\\ M_i = M/m_i M=m1×m2××mn=i=1nmiMi=M/mi
      明显这里的 M i M_i Mi是和 m i m_i mi互质的。

    • 接着我们定义逆元:
      t i = M i − 1 t_i = M_i^{-1} ti=Mi1

    • 所以我们可以构造出一个解 x 0 x_0 x0
      x 0 = ∑ i = 1 n a i M i t i x_0 = \sum_{i=1}^{n}a_iM_it_i x0=i=1naiMiti

    • 解释 ∀ j ∈ [ 1 , n ] \forall j \in [1,n] j[1,n]
      { a j M j t j % m i = 0 j ≠ i a j M j t j % m i = a i j = i \begin{cases} a_jM_jt_j \% m_i = 0 \ \ \ \ \ \ j\neq i \\ a_jM_jt_j \% m_i = a_i \ \ \ \ \ j=i \end{cases} {ajMjtj%mi=0      j=iajMjtj%mi=ai     j=i

    • 通解就是 x = x 0 + k M x = x_0 + kM x=x0+kM,而CRT问题所求的最小整数解其实就是 a n s = x % M ans = x \% M ans=x%M

  • E X C R T EXCRT EXCRT扩展中国剩余定理的基本用法性质

    • 同余方程合并后模数是原来模数的最小公倍数。

    • 合并的流程:

      • 假设前 k − 1 k-1 k1个同余方程合并得到新的方程为: x = r 1 ( m o d M ) x = r_1 \pmod{M} x=r1(modM) M M M是前 k − 1 k-1 k1个同余方程模数的最小公倍数,现在需要考虑合并第 k k k个方程: x = r 2 ( m o d m k ) x = r_2 \pmod{m_k} x=r2(modmk)

      • 对于前 k − 1 k-1 k1个同余方程,其通解为 x = r 1 + i ∗ M , i ∈ Z x=r_1+i*M,i \in Z x=r1+iM,iZ,接着在通解里面找到一个 t t t,使得 ( r 1 + t ∗ M ) % m k = r 2 (r_1+t*M) \%m_k=r_2 (r1+tM)%mk=r2,即可满足第 k k k个方程。那么合并后前 k k k个同余方程的通解就是
        x = r 1 + t ∗ M + i ∗ l c m ( M , m k ) , i ∈ Z x = r_1 + t*M + i* lcm(M,m_k), \ i \in Z x=r1+tM+ilcm(M,mk), iZ
        再对通解模 l c m ( M , m k ) lcm(M,m_k) lcm(M,mk) 即可得到新的 a n s ans ans作为前 k k k个同余方程的最小整数解。

      • 其中找 t t t的过程: M ∗ t + m k ∗ y = r 2 − r 1 M*t + m_k*y=r_2-r_1 Mt+mky=r2r1,其中 M M M就是裴蜀等式的 a , t a,t a,t就是裴蜀等式的 x x x,其中 r 2 − r 1 r_2-r_1 r2r1要满足 g c d ( M , m k ) ∣ ( r 2 − r 1 ) gcd(M,m_k)|(r_2-r_1) gcd(M,mk)(r2r1),否则无解。

      • 我们先用扩展欧几里得求解出 M ∗ t + m k ∗ y = g c d ( M , m k ) M*t + m_k*y=gcd(M,m_k) Mt+mky=gcd(M,mk),顺便求出 g c d ( M , m k ) gcd(M,m_k) gcd(M,mk),再将得到的解 t = t ∗ r 2 − r 1 g c d ( M , m k ) t = t* \frac{r_2-r_1}{gcd(M,m_k)} t=tgcd(M,mk)r2r1,即可求得 t t t

4、组合数

  • 方法一:利用递推公式: c [ a ] [ b ] = c [ a − 1 ] [ b ] + c [ a − 1 ] [ b − 1 ] c[a][b] = c[a-1][b]+c[a-1][b-1] c[a][b]=c[a1][b]+c[a1][b1]即考虑当前选不选的问题。 O ( n 2 ) O(n^2) O(n2)其中( n ≤ 2000 n \le 2000 n2000)

  • 方法二:预处理逆元法:根据公式计算: C a b = a ! ( a − b ) ! b ! C_a^{b} = \frac{a!}{(a-b)!b!} Cab=(ab)!b!a! 由于后面数值一般很大会设置一个模数,可以考虑计算出 f a c [ i ] fac[i] fac[i]表示 i i i的阶乘, i n f a c [ i ] infac[i] infac[i]表示 i i i的阶乘的逆元。因此: C a b = f a c [ a ] ∗ i n f a c [ a − b ] % p ∗ i n f a c [ b ] % p C_a^{b}=fac[a]*infac[a-b]\%p*infac[b]\%p Cab=fac[a]infac[ab]%pinfac[b]%p.此方法可以预处理出$n \le 1e5 $的数。

  • 方法三:利用 L u c a s Lucas Lucas定理: C a b = C a % p b % p ∗ C a / / p b / / p ( m o d p ) C_a^{b}=C_{a\%p}^{b\%p}*C_{a//p}^{b//p}\ (mod \ p) Cab=Ca%pb%pCa//pb//p (mod p)可以处理( 1 ≤ b ≤ a ≤ 1 0 18 1 \le b \le a \le10^{18} 1ba1018 p p p为质数)

    def lucas(a,b,p):if a<p and b<p:return C(a,b,p)return C(a%p,b%p,p)*lucas(a//p,b//p,p)%p
    
    • 应用:括号序列( C 2 n n − C 2 n n − 1 C_{2n}^{n}-C_{2n}^{n-1} C2nnC2nn1),这个也称为卡特兰数(合法出栈数)
      • 卡特兰数公式: f ( n ) = C 2 n n n + 1 = C 2 n n − C 2 n n − 1 f(n)=\frac{C_{2n}^{n}}{n+1}=C_{2n}^{n}-C_{2n}^{n-1} f(n)=n+1C2nn=C2nnC2nn1

5、容斥原理

  • 二项式反演:

    • 恰好和至少的转换(常用到)

      • f i f_i fi表示至少有 k k k个的方案数, g i g_i gi表示恰好有 k k k个方案数,则有:

      f k = ∑ i = k n ( n k ) g i f_k=\sum_{i=k}^{n} \binom{n}{k}g_i fk=i=kn(kn)gi

      • 根据二项式反演则有:

      g k = ∑ i = k n ( − 1 ) i − k ( i k ) f i g_k=\sum_{i=k}^{n}(-1)^{i-k} \binom{i}{k}f_i gk=i=kn(1)ik(ki)fi

      • 当我们需要求恰好 k k k个方案,同时发现至少 k k k个方案比较容易求时可以建议用这个。
    • 恰好和至多的转换(没上面常用)

      • f i f_i fi表示至多有 k k k个方案数, g i g_i gi表示恰好有 k k k个方案数,则有:

      f k = ∑ i = 0 n ( n k ) g i f_k=\sum_{i=0}^{n} \binom{n}{k}g_i fk=i=0n(kn)gi

      • 根据二项式反演则有:

      g k = ∑ i = 0 n ( − 1 ) k − i ( i k ) f i g_k=\sum_{i=0}^{n} (-1)^{k-i} \binom{i}{k}f_i gk=i=0n(1)ki(ki)fi

      • 当发现最多有 k k k个的时候好算时用这个。

6、博弈论

  • 四种经典组合游戏

    • 尼姆游戏: n n n堆物品,每堆 a i a_i ai个,两名玩家轮流,每次选一堆,至少取1个最多可全部取走。
      • 结论:令$S=\oplus_{i=1}^n a_i 先手必胜当且仅当 先手必胜当且仅当 先手必胜当且仅当S\not =0$.(根据异或性质容易判断)
    • 巴什博弈: 1 1 1堆石子,总数 n n n个,两名玩家轮流取,每次至少取1个,最多取m个,取走最后一个的玩家获胜。
      • 结论:可以发现不管怎么取都可以操作出 m + 1 m+1 m+1个石子,所以当 ( m + 1 ) ∣ n (m+1)|n (m+1)n时先手必败。
    • 威佐夫博弈: 2 2 2堆石子,石子数可以不同,两名玩家轮流取石子,每次可以从一堆中取或从两堆中取走相同个石子。取走最后一个石子的人获胜。
      • 结论:设 x = 1 + 5 2 x=\frac{1+\sqrt 5}{2} x=21+5 ,则第 i i i个必败态( a i , b i a_i,b_i ai,bi)满足$a_i=\lfloor ix\rfloor , , ,b_i=i+a_i=\lfloor ix^2 \rfloor$.
      • 在实际代码中就是 m i n ( a , b ) = i n t ( a b s ( a − b ) ∗ 1 + 5 2 ) min(a,b)= int(abs(a-b)*\frac{1+\sqrt 5}{2}) min(a,b)=int(abs(ab)21+5 )则先手必败,反之 w i n win win.
    • 斐波那契博弈: 1 1 1堆石子,总数 n n n个,两名玩家轮流取,先手不能一次取完,至少1个,之后每次可以取的石子数至少为1,至多为对手刚取的石子数的2倍。取走最后一个的获胜。
      • 结论:当且仅当石子个数为斐波那契数时先手必败。
  • N i m − S G Nim-SG NimSG函数

    • 尼姆游戏的变种总结出来的规律。 M e x Mex Mex运算: m e x ( S ) = min ⁡ { x ∈ N ∣ x ∉ S } { x } mex(S)=\min\limits_{\{x \in \mathbb{N} \mid x \not \in S \}} \{x\} mex(S)={xNxS}min{x}也就是不在 S S S集合中的最小自然数

    • S G SG SG函数计算每一个节点的 s g sg sg值, S G ( x ) = m e x ( { S G ( y 1 ) , S G ( y 2 ) , … , S G ( y k ) } ) SG(x)=mex(\{SG(y_1),SG(y_2),\dots,SG(y_k)\}) SG(x)=mex({SG(y1),SG(y2),,SG(yk)}),其中 y 1 , y 2 , … , y k y_1,y_2,\dots,y_k y1,y2,,yk x x x的后继节点。

      def mex(lst):lst = list(set(lst))return next((idx for idx,num in enumerate(lst) if idx!=num),lst[-1]+1)
      def SG(lst,n):sg = [0]*(n+5)for i in range(1,n+1):sg[i] = mex([sg[i-j] for j in lst if i-j>=0])return sg
      
    • 这个模板基本通用了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/24158.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker搭建ELKF日志分析系统

Docker搭建ELKF日志分析系统 文章目录 Docker搭建ELKF日志分析系统资源列表基础环境一、系统环境准备1.1、创建所需的映射目录1.2、修改系统参数1.3、单击创建elk-kgc网络桥接 二、基于Dockerfile构建Elasticsearch镜像2.1、创建Elasticsearch工作目录2.2、上传资源到指定工作路…

python基础实例

下一个更大的数 定义一个Solution类&#xff0c;用于实现next_great方法 class Solution: def next_great(self, nums1, nums2): # 初始化一个空字典answer&#xff0c;用于存储答案 answer {} # 初始化一个空列表stack&#xff0c;用于存储待比较的数字 stack [] # 遍历nu…

短视频评论截取提取软件技术思路

关于开发短视频评论所需要用到得技术第一篇 前言&#xff1a;根据业务需要&#xff0c;我们需要通过短视频找到准客户&#xff0c;这个软件应该是叫短视频评论提取软件&#xff0c;或者是短视频评论采集。无所谓叫什么都可以 进入正题。 第一篇只讲解所应该用到得基础工作 一…

图论方法学习

图论方法 考过的点 2024年省赛考察&#xff1a;最小生成树2023年国赛考察&#xff1a;分层图&#xff08; 01 B F S 01BFS 01BFS双端队列&#xff09;2022年国赛考察&#xff1a;Floyd算法 2024国赛准备 重点掌握 D i j k s t r a Dijkstra Dijkstra、 S P F A SPFA SPFA、 …

【Java】解决Java报错:ClassCastException

文章目录 引言1. 错误详解2. 常见的出错场景2.1 错误的类型转换2.2 泛型集合中的类型转换2.3 自定义类和接口转换 3. 解决方案3.1 使用 instanceof 检查类型3.2 使用泛型3.3 避免不必要的类型转换 4. 预防措施4.1 使用泛型和注解4.2 编写防御性代码4.3 使用注解和检查工具 5. 示…

Linux网络编程之select的理解

这两天在学习linux网络编程,其中学习到了select框架,有些地方百思不得其解。今天搞明白了,在这里记录下。 涉及的代码内容: fd_set rfds, rset; FD_ZERO(&rfds); FD_SET(sockfd, &rfds); 什么是fd_set类型; 它是一个无符号长整形的数组结构体。大体声明结构为:…

springboot停车微信小程序小程序-计算机毕业设计源码92714

摘 要 在信息飞速发展的今天&#xff0c;网络已成为人们重要的信息交流平台。每天都有大量的农产品需要通过网络发布&#xff0c;为此&#xff0c;本人开发了一个基于springboot停车微信小程序小程序。 对于本停车微信小程序的设计来说&#xff0c;它主要是采用后台采用java语…

党史馆3d网上展馆

在数字化浪潮的推动下&#xff0c;华锐视点运用实时互动三维引擎技术&#xff0c;为用户带来前所未有的场景搭建体验。那就是领先于同行业的线上三维云展编辑平台搭建编辑器&#xff0c;具有零基础、低门槛、低成本等特点&#xff0c;让您轻松在数字化世界中搭建真实世界的仿真…

2.Rust自动生成文件解析

目录 一、生成目录解析二、生成文件解析2.1 Cargo.toml2.2 main函数解析 一、生成目录解析 先使用cargo clean命令删除所有生成的文件&#xff0c;下图显示了目录结构和 main.rs文件 使用cargo new testrust时自动创建出名为testrust的Rust项目。内部主要包含一个src的源码文…

python如何提取html中所有中文

要从HTML中提取所有的中文文本&#xff0c;你可以使用Python的HTML解析库如BeautifulSoup来遍历HTML文档&#xff0c;并筛选出中文文本。以下是一个简单的示例&#xff0c;说明如何使用BeautifulSoup和正则表达式来提取HTML中的所有中文&#xff1a; from bs4 import Beautifu…

Centos7安装ElasticSearch

Centos7安装ElasticSearch 准备工作 下载elasticsearch https://www.elastic.co/cn/elasticsearch 将下载好的包上传到/usr/local/elasticsearch/ 路径下 安装 安装elasticsearch解压缩即可&#xff01; tar -zxvf elasticsearch-8.12.2-linux-x86_64.tar.gz进入/usr/loca…

汽车EDI——Volvo EDI 项目案例

项目背景 作为Volvo的长期合作伙伴&#xff0c;C公司收到Volvo的EDI对接邀请&#xff0c;需要实现EDI对接。C公司将会面临哪些挑战&#xff1f;又应该相应地选择何种EDI解决方案呢&#xff1f; 汽车行业强调供需双方的高效协同&#xff08;比如研发设计、生产计划、物流信息等…

Hi3519DV500 学习摘录

文章目录 一、问题1、open-vm-tools 安装2、pushd: not found3、autoreconf4、编译util-linux源码时报错 ERROR: You must have autopoint installed to 二、NFS1、服务器搭建2、u-boot常用命令3、配置4、问题 三、补缺1、make 一、问题 1、open-vm-tools 安装 open-vm-tools…

关于使用XX源码,开始编译的时候报错:不允许使用返回函数的函数

在使用vlc源码&#xff0c;开始编译的时候遇到以下错误&#xff1a; 仔细一看&#xff0c;懵掉了&#xff0c;NND源码编译都有错&#xff1f;报错如下&#xff1a; 一顿查找后&#xff0c;得出解决问题的办法&#xff1a;把ssize_t改为int 在大多数情况下&#xff0c;你可以将…

ubuntu22.04 gitleb服务器满了,扩容机器的磁盘的详细步骤

在Ubuntu 22.04上为GitLab服务器扩容磁盘可以分为以下几步进行&#xff1a;增加磁盘空间、扩展文件系统&#xff0c;并确保数据安全。这些步骤可以应用于物理服务器或虚拟机&#xff08;包括云服务中的实例&#xff09;。以下是详细步骤&#xff1a; 1. 添加新的磁盘空间 1.1…

國際知名榮譽顧問加入台灣分析集團總部,全面升級量子電腦Q系統

近期,國際知名的榮譽顧問正式加入台灣分析集團總部,利用相同的量子數據規格訊息數據庫,進行全方位的系統升級。此次升級後,量子電腦Q系統的精確預測和迅速反應能力提升了3.29%。透過高級的數據處理和技術分析,社群用戶將在瞬息萬變的市場中保持領先地位。 “量子電腦Q系統”由資…

使用紫铜管制作半波天线的折合振子

一、概述 半波天线是一种简单而有效的天线类型&#xff0c;其长度约为工作波长的一半。它具有较好的辐射特性和较高的增益&#xff0c;广泛应用于业余无线电、电视接收等领域。使用紫铜管制作折合振子&#xff0c;不仅可以提高天线的机械强度&#xff0c;还能增强其导电性能。 …

NSSCTF-Web题目7

目录 [SWPUCTF 2022 新生赛]ez_rce 1、题目 2、知识点 3、思路 ​编辑 [MoeCTF 2022]baby_file 1、题目 2、知识点 3、思路 [SWPUCTF 2022 新生赛]ez_rce 1、题目 2、知识点 ThinkPHP V5 框架漏洞的利用&#xff0c;命令执行 由于ThinkPHP5在处理控制器传参时&#xff…

经典神经网络(10)PixelCNN模型、Gated PixelCNN模型及其在MNIST数据集上的应用

经典神经网络(10)PixelCNN模型、Gated PixelCNN模型及其在MNIST数据集上的应用 1 PixelCNN PixelCNN是DeepMind团队在论文Pixel Recurrent Neural Networks (16.01)提出的一种生成模型&#xff0c;实际上这篇论文共提出了两种架构&#xff1a;PixelRNN和PixelCNN&#xff0c;两…

web学习笔记(六十四)

目录 1.路由的声明式跳转和编程式跳转 1.1声明式跳转 1.2编程式跳转 2. 路由传参query 3.路由传参 params 4.Vue中路由传参方式以及如何接收路由参数? 5.命名路由 1.路由的声明式跳转和编程式跳转 我们在这篇文章中提到的路由都是前端路由&#xff0c;是用来匹配组件完…