【数学】完全剩余系与费马小定理

2024-01-24 22:44

本文主要是介绍【数学】完全剩余系与费马小定理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

完全剩余系

我们定义 a i ( 1 ≤ i ≤ n ) a_i(1\le i\le n) ai(1in) 为模 m m m 的完全剩余系当且仅当对于 1 ≤ i , j ≤ n 1\le i,j\le n 1i,jn i ≠ j i\ne j i=j,满足 a i ≢ a j ( m o d m ) a_i\not\equiv a_j\pmod m aiaj(modm),对于 0 ≤ i < n 0\le i<n 0i<n ∃ j \exist j j 使得 a j ≡ i ( m o d m ) a_j\equiv i\pmod m aji(modm)
性质1:若数组 a 1 , a 2 , ⋯ , a n a_1,a_2,\cdots,a_n a1,a2,,an 为模 m m m 的完全剩余系,则 a 1 + b , a 2 + b , ⋯ , a n + b a_1+b,a_2+b,\cdots,a_n+b a1+b,a2+b,,an+b 也为模 m m m 的完全剩余系。
性质2:若数组 a 1 , a 2 , ⋯ , a n a_1,a_2,\cdots,a_n a1,a2,,an 为模 m m m 的完全剩余系, gcd ⁡ ( b , m ) = 1 \gcd(b,m)=1 gcd(b,m)=1,则 a 1 b , a 2 b , ⋯ , a n b a_1b,a_2b,\cdots,a_nb a1b,a2b,,anb 也为模 m m m 的完全剩余系。
以上两性质都可以由定义简单推导得到,不多做赘述。

费马小定理

费马小定理: a ∈ Z , p ∈ prime a\in\Z,p\in\text{prime} aZ,pprime,则 a p − 1 ≡ 1 ( m o d p ) a^{p-1}\equiv1\pmod p ap11(modp)
证明:
构造 b i = a ⋅ i ( 0 ≤ i < p ) b_i=a\cdot i(0\le i<p) bi=ai(0i<p) 显然为模 p p p 的完全剩余系
∏ i = 1 p − 1 b i ≡ ∏ i = 1 p − 1 i ( m o d p ) \prod\limits^{p-1}_{i=1}b_i\equiv\prod\limits^{p-1}_{i=1}i\pmod p i=1p1bii=1p1i(modp)
∏ i = 1 p − 1 a ⋅ i ≡ ∏ i = 1 p − 1 i ( m o d p ) \prod\limits^{p-1}_{i=1}a\cdot i\equiv\prod\limits^{p-1}_{i=1}i\pmod p i=1p1aii=1p1i(modp)
约去 ∏ i = 1 p − 1 i \prod\limits^{p-1}_{i=1}i i=1p1i,得 a p − 1 ≡ 1 ( m o d p ) a^{p-1}\equiv1\pmod p ap11(modp),证毕。
费马小定理适用于求乘法逆元。

性能(求乘法逆元)

  • 时间复杂度 Θ ( log ⁡ p ) \Theta(\log p) Θ(logp)

代码(就是快速幂,所以不贴了

练习

  • 洛谷P3811

注:有一种线性求逆元的方法,故部分凉心题目会卡掉纯费马小定理写法。

这篇关于【数学】完全剩余系与费马小定理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/641254

相关文章

CSS实现元素撑满剩余空间的五种方法

《CSS实现元素撑满剩余空间的五种方法》在日常开发中,我们经常需要让某个元素占据容器的剩余空间,本文将介绍5种不同的方法来实现这个需求,并分析各种方法的优缺点,感兴趣的朋友一起看看吧... css实现元素撑满剩余空间的5种方法 在日常开发中,我们经常需要让某个元素占据容器的剩余空间。这是一个常见的布局需求

Python使用Reflex构建现代Web应用的完全指南

《Python使用Reflex构建现代Web应用的完全指南》这篇文章为大家深入介绍了Reflex框架的设计理念,技术特性,项目结构,核心API,实际开发流程以及与其他框架的对比和部署建议,感兴趣的小伙... 目录什么是 ReFlex?为什么选择 Reflex?安装与环境配置构建你的第一个应用核心概念解析组件

Python日期和时间完全指南与实战

《Python日期和时间完全指南与实战》在软件开发领域,‌日期时间处理‌是贯穿系统设计全生命周期的重要基础能力,本文将深入解析Python日期时间的‌七大核心模块‌,通过‌企业级代码案例‌揭示最佳实践... 目录一、背景与核心价值二、核心模块详解与实战2.1 datetime模块四剑客2.2 时区处理黄金法

Android NDK版本迭代与FFmpeg交叉编译完全指南

《AndroidNDK版本迭代与FFmpeg交叉编译完全指南》在Android开发中,使用NDK进行原生代码开发是一项常见需求,特别是当我们需要集成FFmpeg这样的多媒体处理库时,本文将深入分析A... 目录一、android NDK版本迭代分界线二、FFmpeg交叉编译关键注意事项三、完整编译脚本示例四

Linux find 命令完全指南及核心用法

《Linuxfind命令完全指南及核心用法》find是Linux系统最强大的文件搜索工具,支持嵌套遍历、条件筛选、执行动作,下面给大家介绍Linuxfind命令完全指南,感兴趣的朋友一起看看吧... 目录一、基础搜索模式1. 按文件名搜索(精确/模糊匹配)2. 排除指定目录/文件二、根据文件类型筛选三、时间

JavaScript中的Map用法完全指南

《JavaScript中的Map用法完全指南》:本文主要介绍JavaScript中Map用法的相关资料,通过实例讲解了Map的创建、常用方法和迭代方式,还探讨了Map与对象的区别,并通过一个例子展... 目录引言1. 创建 Map2. Map 和对象的对比3. Map 的常用方法3.1 set(key, v

使用C#代码计算数学表达式实例

《使用C#代码计算数学表达式实例》这段文字主要讲述了如何使用C#语言来计算数学表达式,该程序通过使用Dictionary保存变量,定义了运算符优先级,并实现了EvaluateExpression方法来... 目录C#代码计算数学表达式该方法很长,因此我将分段描述下面的代码片段显示了下一步以下代码显示该方法如

uva 10014 Simple calculations(数学推导)

直接按照题意来推导最后的结果就行了。 开始的时候只做到了第一个推导,第二次没有继续下去。 代码: #include<stdio.h>int main(){int T, n, i;double a, aa, sum, temp, ans;scanf("%d", &T);while(T--){scanf("%d", &n);scanf("%lf", &first);scanf

uva 10025 The ? 1 ? 2 ? ... ? n = k problem(数学)

题意是    ?  1  ?  2  ?  ...  ?  n = k 式子中给k,? 处可以填 + 也可以填 - ,问最小满足条件的n。 e.g k = 12  - 1 + 2 + 3 + 4 + 5 + 6 - 7 = 12 with n = 7。 先给证明,令 S(n) = 1 + 2 + 3 + 4 + 5 + .... + n 暴搜n,搜出当 S(n) >=

uva 11044 Searching for Nessy(小学数学)

题意是给出一个n*m的格子,求出里面有多少个不重合的九宫格。 (rows / 3) * (columns / 3) K.o 代码: #include <stdio.h>int main(){int ncase;scanf("%d", &ncase);while (ncase--){int rows, columns;scanf("%d%d", &rows, &col