首页 > 编程语言 >【算法】欧拉函数、快速幂、容斥原理

【算法】欧拉函数、快速幂、容斥原理

时间:2024-11-27 09:26:04浏览次数:5  
标签:frac res 容斥 个数 算法 整除 欧拉 mod

欧拉函数

内容:表示1-n中与n互质的个数

原理:一个数可以被质因子表示,而除了质因子及其倍数,剩下的个数都是与n互质

推导(容斥原理):

​ 1-N总共有N个数,首先将质因子\(p_1,p_2...p_n\)中的倍数减去,因为质因子的倍数与n是不互质的,因此首先减去质因子倍数的个数:

\[N = N- \frac{N}{p_1}- \frac{N}{p_2}- \frac{N}{p_3} \]

​ 又因为质因子\(p_1,\)\(p_2\)可能有公共的倍数数字,在这个过程可能被减掉两次(例如6是2,3的倍数,在上述过程中6会被减掉两次),因此还需要再加上一次,所以有:

\[N = N+ \frac{N}{p_1p_2}+ \frac{N}{p_2p_3} \]

​ 以此类推,利用容斥原理的思想,可得:

\[\varphi(N)=N(1-\frac{1}{p_1})(1-\frac{1}{p_2})...(1-\frac{1}{p_k}) \]

def ola(x):
    res = x
    for i in range(2, int(x/i) + 1):
        if(x % i == 0):
            while (x % i == 0):
            	x //= i
            res *= ((i-1)/i)
    if (x > 1) res*= ((x-1)/x)
  • 筛法求欧拉函数

快速幂

内容:快速求出\(a^k\ mod \ p\)的结果,一般做法的时间复杂度是\(O(k)\),快速幂的时间复杂度是\(O(logk)\)

思路:将k分解成2的指数幂相加,例如\(2^5\)的5可以转换为2进制形式101,因此\(2^5\)可以写为\(2^{2^0}\times2^{2^2}\),最多只需要进行\(logk\)次操作

应用:快速幂求逆元

def qmi(x, k, p):
    res = 1
    while k:
        if (k & 1) res *= (a % p)
        k >>= 1
        a = a * a % p
   	return res
  • 求逆元

要求:已知b,求使得\(\frac{b}{a} \ mod \ p=1\)成立的a值

[!note]

费马小定理

如果 p 是素数,且 a 是整数,并且 a 不被 p 整除,那么:

\[a^ {p−1}≡1 (mod\ p) \]

注:如果能够整除的话是不可能会mod == 1的

​ 所以\(\frac{b}{a} \ mod \ p=1\)可以写为\(b ·x \ mod \ p=1\),利用费马小定理有:

\[b · b^{p-2}≡1 (mod\ p) \]

​ 即\(a = b^{p-2}\),最后只需利用快速幂求出\(b^{p-2}\)

容斥原理

  • 能被整除的数

要求:求出1-n中可以被\(p_1,\)\(p_2,\)\(p_3...\)等质数至少一个整除的整数有多少个

# 求1-360中有多少个可以整除2,3,5的数字个数
p = [2, 3, 5]
n = 360
k = len(p) #表示一个有多少种集合个数,可以被2整除的为一个集合,可以被3整除的为一个集合...
for i in range(1 << k): # 二进制优化,i表示选择哪些集合,100(4)表示只有选择可以被2整除的集合,101(5)表示选择可以被2和5整除的集合
    for j in range(k):
        cnt = 0
        t = 1
        if (i >> j & 1): # 表示选取第k-j个集合
            cnt += 1
            if t * p[j] > n: # 说明目前所选择的集合在1-n的情况下不可能有交集,例如1-20中,不可能存在同时可以除以2 3 5的数字,最小的数字为2*3*5
                t = -1 
                break
            t *= p[j]
        if t != -1:
            if cnt % 2 != 0:
                res += n / t # 奇数集合的交集要增
            else:
                res -= n / t # 偶数集合的交集要减

标签:frac,res,容斥,个数,算法,整除,欧拉,mod
From: https://www.cnblogs.com/DLShark/p/18571496

相关文章

  • 蓝桥杯c++算法秒杀【6】之动态规划【下】(数字三角形、砝码称重(背包问题)、括号序列、
    别忘了请点个赞+收藏+关注支持一下博主喵!!!! ! ! ! !关注博主,更多蓝桥杯nice题目静待更新:)动态规划三、括号序列【问题描述】        给定一个括号序列,要求尽可能少地添加若干括号使得括号序列变得合法,当添加完成后,会产生不同的添加结果,请问有多少种本质......
  • 【贪心算法第五弹——300.最长递增子序列】
    目录1.题目解析题目来源测试用例2.算法原理3.实战代码代码解析注意本题还有一种动态规划的解决方法,贪心的方法就是从动态规划的方法总结而来,各位可以移步博主的另一篇博客先了解一下:动态规划-子序列问题——300.长递增子序列 1.题目解析题目来源300.最长递增......
  • 操作系统三种处理机调度算法介绍
    以下是对先来先服务(FCFS)、短作业优先(SJF)、高响应比优先(HRRN)详细介绍:先来先服务(FCFS)算法•算法原理:按照作业或进程到达系统的先后顺序进行调度,先到达的先被服务,就如同日常生活中排队办事一样,先来的人先得到处理。•计算步骤:1.记录每个作业(或进程)的到达时间和服务时间(即执......
  • node.js毕设基于智能算法的健康食材订购系统程序+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于健康食材订购系统的研究,现有研究主要以传统的食材订购流程优化为主,如提高配送效率、降低成本等方面。专门针对运用智能算法来构建健康食材订购系统......
  • 如何使用Matlab实现基于柯西变异和正余弦改进的麻雀搜索算法(SCSSA)优化卷积-长短期记忆
    4-SCSSA-CNN-BiLSTM时间序列预测柯西变异和正余弦改进的麻雀搜索算法(SCSSA)优化卷积-长短期记忆神经网络的数据预测模型Matlab语言1.Matlab版本要在2020B以上。优化的参数为:学习率,隐藏层节点数,正则化参数。评价指标包括:R2、MAE、RMSE和MAPE等,图很多,出图结果如图所示,2......
  • 如何实现基于柯西变异和正余弦改进的麻雀搜索算法(SCSSA)优化卷积-长短期记忆神经网络(CN
    97-融合正余弦和柯西变异的麻雀搜索算法左侧窗口:列出了多个.m文件,这表明这是一个MATLAB项目,包含了不同的脚本和函数文件。例如,“SSA.m”,“PSO.m”,“GWO.m”,“SCSSA.m”等,这些都是不同优化算法的实现文件。右侧窗口:展示了一张三维图形(左上角),可能是某个测试函数的表面图,通......
  • 代码随想录算法训练营day58| 117.软件构建 47.参加科学大会
    学习资料:https://www.programmercarl.com/kamacoder/0117.软件构建.html#拓扑排序的背景图论拓扑排序:收集入度为0的节点,删掉该节点后其他节点的入度可能变化,记得更新,然后继续删除入度为0的点,直到没有。整个过程的顺序就对应了有向图dijkstra算法:类似prim,也是贪心,找距离源点最近......
  • 算法练习:34. 在排序数组中查找元素的第一个和最后一个位置
    题目链接:34.在排序数组中查找元素的第一个和最后一个位置。在这里我们可以用暴力的解法:就是一次判断,第一次遇见的元素==target,和最后一次遇见的,就保存起来但是这样暴力解法时间复杂度为O(N)。时间复杂度超出了题目意思。优化解法:因为数组是有序的,我们可以根据二分查找思想......
  • JavaScript 中通过Array.sort() 实现多字段排序、排序稳定性、随机排序洗牌算法、优化
    目录JavaScript中通过Array.sort()实现多字段排序、排序稳定性、随机排序洗牌算法、优化排序性能,JS中排序算法的使用详解(附实际应用代码)一、为什么要使用Array.sort()二、Array.sort()的使用与技巧1、基础语法2、返回值3、使用技巧三、Array.sort()的复杂用法与实际......
  • 多目标优化算法:多目标红尾鹰算法(MORTH)求解WFG1-WFG9,提供完整MATLAB代码
    一、红尾鹰算法红尾鹰算法(Red-tailedhawkalgorithm,RTH)是2023年提出的一种新型群智能优化算法,它通过模拟红尾鹰的狩猎行为来解决优化问题。以下是对红尾鹰算法的详细介绍:算法简介红尾鹰算法(RTH)模拟了红尾鹰的狩猎行为,具有进化能力强、搜索速度快、寻优能力强的特点。该......