续-算法-数学知识

3、欧拉函数

1、定义:

1~n 中与 n 互质的数的个数

例如:6 的有 1 2 3 4 5 6 其中,与 n 互质 的 数的个数为 2个分别是:1、5

2、计算:

$ N = p_1^{a1} × p_2^{a2} × p_3^{a3} × … × p_k^{ak} $(例如:6 = 21 × 31

$ \phi(N) = N(1 - \frac{1}{p_1})(1 - \frac{1}{p_2}) …(1 - \frac{1}{p_k}) $

import java.util.*;public class Main {static int[] vs = new int[10010];public static void main(String[] args) {Scanner sc = new Scanner(System.in);int t = 1;while(t-- > 0) {int n = 6;int ans = n;for(int i = 2;i <= n / i;i++) {if(n % i == 0) {ans = ans / i * (i - 1);while(n % i == 0) n /= i;}}if(n > 1) ans = ans / n * (n-1);System.out.println(ans);}sc.close();}
}
import java.util.*;
public class Main{static int N = 1000010;static int index = 0;static int[] p = new int[N];static boolean[] st = new boolean[N];static int[] phi = new int[N];public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();phi[1] = 1;for(int i = 2;i <= n;i++) {if(!st[i]) {phi[i] = i - 1;p[index++] = i;}for(int j = 0;p[j] <= n / i;j++) {st[p[j] * i] = true;if(i % p[j] == 0) {phi[p[j] * i] = phi[i] * p[j];break;}phi[p[j] * i] = phi[i] * (p[j] - 1);}}long ans = 0;for(int i = 1;i <= n;i++) {ans += phi[i];}System.out.println(ans);sc.close();}
}
3、拓展

对于 1~m 中,与 n 互质的数的个数的 特殊情况

  • 如果 n 为质数:直接计算,结果为:$ m - [\frac{m}{n}](表示向向下取整,即为:(int)(m/n)) $
  • 如果 m 是 n 的倍数,即:$ m=k \cdot n ,结果为: ,结果为: ,结果为: k \cdot \phi(n) (其中\phi(n)是n的欧拉数) $
  • 如果 m 是 n 的次方倍,即:$ m = n^k ,结果为: ,结果为: ,结果为: m=n^{k-1} \cdot n ==> 结果为:n^{k-1} \phi(n) $

用处:如果 a 与 b 互质,那末有:$ \bbox[5px,border:2px solid greenyellow]
{
a^{\phi(b)} \equiv 1 \pmod{b} ===> a^{\phi(b)} - mod - b = 1
}
$

4、快速幂

1、原理

对于一个数 $ a^k 必定可以拆成 必定可以拆成 必定可以拆成 a^{x_1} * a^{x_2} * … * a^{x_k} , 因为: k 必定能转化为二进制,而二进制的有 1 的一项,即为 x < s u b > k < / s u b > ,因此,可以计算每一项的 ,因为:k 必定能转化为二进制,而二进制的有1的一项,即为x<sub>k</sub>,因此,可以计算每一项的 ,因为:k必定能转化为二进制,而二进制的有1的一项,即为x<sub>k</sub>,因此,可以计算每一项的 a^x $进行计算。

因此要预处理计算出:$ a{20}、a{21}、a{22}…a{2k} , 之后,将 ,之后,将 ,之后,将 a^k $分解,计算。

import java.util.*;
public class Main{public static void main(String[] args) {Scanner sc = new Scanner(System.in);long n = 1;while(n-- > 0) {long a = 27; // 底数long k = 36; // 指数long p = (long) (1e9 + 7); // 取模System.out.println(qmi(a,k,p));}sc.close();}static long qmi(long a,long k,long p){long res = 1; // 初始值为 1while(k != 0) {// 如果 k(指数)的末尾为 1,那末直接计算// res = a^x_1 * .. * a^x_kif((k & 1) == 1) res = res * a % p;k >>= 1; // 指数向右移动一位a = a * a % p; // 持续计算预处理}return res; // 返回的就是 a^k % p 的结果}
}
2、费马定理

$ b^{p-1} \equiv 1 \pmod{p} $ 条件:p 与 b 必须互质,也可也是,p 是质数

因此:由此可知,求 b 的模 p 的逆元,即为:$ b^{p-2} $即为 b 模 p 的逆元

public class Main {public static void main(String[] args) {// 求 n! 模 1e9 + 7 的逆元int n = 3;int mod = 1000000007;long ans = 1;for(int i = 1;i <= n;i++)ans = ans * qmi(i,mod - 2,mod) % mod;System.out.println(ans);}static long qmi(long a,long k,long p){long res = 1;while(k != 0) {if((k & 1) == 1)res = res * a % p;k >>= 1;a = a * a % p;}return res;}
}

5、组合数

1、快速计算 $ C_n^m $的值

1、条件:n <= 20000

2、原理:$ C_n^m = C_{n-1}^m + C_{n-1}^{m-1} $ 类似于动态规划

public class Main {static int[][] c = new int[20010][20010];public static void main(String[] args) {long s = System.currentTimeMillis();int n = 20000;for(int i = 0;i < n;i++) {for(int j = 0;j <= i;j++) {if(j == 0) c[i][j] = 1;else c[i][j] = c[i-1][j] + c[i-1][j-1];}}System.out.println(c[6][2]);System.out.println(System.currentTimeMillis() - s);}
}

6、容斥原理

主要用于计算集合并集的个数,除去相交的个数。

容斥原理:$ S_1 ∪ S_2 ∪ S_3 = S_1 ∩ S_2 ∩ S_3 - (S_1 ∩ S_2) - (S_1 ∩ S_3) - (S_2 ∩ S_3) + (S_1 ∩ S_2 ∩ S_3) $

要求从 1~ n 中任意选择任意个数,那末可以用位运算来遍历这些所有的选择。

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

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

相关文章

C/C++测试框架googletest使用示例

文章目录 文档编译安装示例参考文章 文档 https://github.com/google/googletest https://google.github.io/googletest/ 编译安装 googletest是cmake项目&#xff0c;可以用cmake指令编译 cmake -B build && cmake --build build将编译产物lib和include 两个文件夹…

LintCode第974题-求矩阵各节点的最短路径(以0为标准)

描述 给定一个由0和1组成的矩阵&#xff0c;求每个单元格最近的0的距离。 两个相邻细胞之间的距离是1。 给定矩阵的元素数不超过10,000。 在给定的矩阵中至少有一个0。 单元格在四个方向上相邻:上&#xff0c;下&#xff0c;左和右。 样例 例1: 输入: [[0,0,0],[0,0,0],[0…

Redis核心机制-缓存、分布式锁

目录 缓存 缓存更新策略 定期生成 实时生成 缓存问题 缓存预热&#xff08;Cache preheating&#xff09; 缓存穿透&#xff08;Cache penetration&#xff09; 缓存雪崩&#xff08;Cache avalanche&#xff09; 缓存击穿&#xff08;Cache breakdown&#xff09; 分…

CF每日5题(1300-1500)

最近急速补练蓝桥杯中&#xff0c;疏于cf练习。 感觉自己过题还是太慢了。 今日水题&#xff0c;我水水水水。 1- 1979C lcm 水 1400 第 i i i局赢了&#xff0c;1个硬币顶 k [ i ] k[i] k[i]个贡献&#xff0c;所以每局分硬币 x i 1 k [ i ] x_i{1\over k[i]} xi​k[i]1​个…

从代码学习深度学习 - LSTM PyTorch版

文章目录 前言一、数据加载与预处理1.1 代码实现1.2 功能解析二、LSTM介绍2.1 LSTM原理2.2 模型定义代码解析三、训练与预测3.1 训练逻辑代码解析3.2 可视化工具功能解析功能结果总结前言 深度学习中的循环神经网络(RNN)及其变种长短期记忆网络(LSTM)在处理序列数据(如文…

easy-poi 一对多导出

1. 需求&#xff1a; 某一列上下两行单元格A,B值一样且这两个单元格&#xff0c; 前面所有列对应单元格值一样的话&#xff0c; 就对A,B 两个单元格进行纵向合并单元格 1. 核心思路&#xff1a; 先对数据集的国家&#xff0c;省份&#xff0c;城市...... id 身份证进行排序…

AI比人脑更强,因为被植入思维模型【42】思维投影思维模型

giszz的理解&#xff1a;本质和外在。我们的行为举止&#xff0c;都是我们的内心的表现。从外边可以看内心&#xff0c;从内心可以判断外在。曾国藩有&#xff17;个识人的方法&#xff0c;大部分的人在他的面前如同没穿衣服一样。对于我们自身的启迪&#xff0c;我认为有四点&…

Spring Boot 打印日志

1.通过slf4j包中的logger对象打印日志 Spring Boot内置了日志框架slf4j&#xff0c;在程序中调用slf4j来输出日志 通过创建logger对象打印日志&#xff0c;Logger 对象是属于 org.slf4j 包下的不要导错包。 2.日志级别 日志级别从高到低依次为: FATAL:致命信息&#xff0c;表…

【IOS webview】源代码映射错误,页面卡住不动

报错场景 safari页面报源代码映射错误&#xff0c;页面卡住不动。 机型&#xff1a;IOS13 技术栈&#xff1a;react 其他IOS也会报错&#xff0c;但不影响页面显示。 debug webpack配置不要GENERATE_SOURCEMAP。 解决方法&#xff1a; GENERATE_SOURCEMAPfalse react-app…

ES中经纬度查询geo_point

0. ES版本 6.x版本 1. 创建索引 PUT /location {"settings": {"number_of_shards": 1,"number_of_replicas": 0},"mappings": {"location": {"properties": {"id": {"type": "keywor…

OpenCV界面编程

《OpenCV计算机视觉开发实践&#xff1a;基于Python&#xff08;人工智能技术丛书&#xff09;》(朱文伟&#xff0c;李建英)【摘要 书评 试读】- 京东图书 OpenCV的Python开发环境搭建(Windows)-CSDN博客 OpenCV也支持有限的界面编程&#xff0c;主要是针对窗口、控件和鼠标…

GOC L2 第五课模运算和周期二

课堂回顾&#xff1a; 求取余数的过程叫做模运算 每轮的动作都是重复的&#xff0c;我们称这个过程位周期。 课堂学习&#xff1a; 剩余计算器 秋天到了&#xff0c;学校里的苹果熟了&#xff0c;太乙老师&#xff0c;想让哪吒帮忙设计一个计算器&#xff0c;看每个小朋友能分…

54.大学生心理健康管理系统(基于springboot项目)

目录 1.系统的受众说明 2.相关技术 2.1 B/S结构 2.2 MySQL数据库 3.系统分析 3.1可行性分析 3.1.1时间可行性 3.1.2 经济可行性 3.1.3 操作可行性 3.1.4 技术可行性 3.1.5 法律可行性 3.2系统流程分析 3.3系统功能需求分析 3.4 系统非功能需求分析 4.系统设计…

Redis 除了数据类型外的核心功能 的详细说明,包含事务、流水线、发布/订阅、Lua 脚本的完整代码示例和表格总结

以下是 Redis 除了数据类型外的核心功能 的详细说明&#xff0c;包含事务、流水线、发布/订阅、Lua 脚本的完整代码示例和表格总结&#xff1a; 1. Redis 事务&#xff08;Transactions&#xff09; 功能描述 事务通过 MULTI 和 EXEC 命令将一组命令打包执行&#xff0c;保证…

STM32F103C8T6单片机硬核原理篇:讨论GPIO的基本原理篇章1——只讨论我们的GPIO简单输入和输出

目录 前言 输出时的GPIO控制部分 标准库是如何操作寄存器完成GPIO驱动的初始化的&#xff1f; 问题1&#xff1a;如何掌握GPIO的编程细节——跟寄存器如何打交道 问题2&#xff1a;哪些寄存器&#xff0c;去哪里找呢&#xff1f; 问题三&#xff0c;寄存器的含义&#xff…

前端布局难题:父元素padding导致子元素无法全屏?3种解决方案

大家好&#xff0c;我是一诺。今天要跟大家分享一个我在实际项目中经常用到的CSS技巧——如何让子元素突破父元素的padding限制&#xff0c;实现真正的全屏宽度效果。 为什么会有这个需求&#xff1f; 记得我刚入行的时候&#xff0c;接到一个需求&#xff1a;要在内容区插入…

当网页受到DDOS网络攻击有哪些应对方法?

分布式拒绝服务攻击也是人们较为熟悉的DDOS攻击&#xff0c;这类攻击会通过大量受控制的僵尸网络向目标服务器发送请求&#xff0c;以此来消耗服务器中的资源&#xff0c;致使用户无法正常访问&#xff0c;当网页受到分布式拒绝服务攻击时都有哪些应对方法呢&#xff1f; 建立全…

LeNet-5简介及matlab实现

文章目录 一、LeNet-5网络结构简介二、LeNet-5每一层的实现原理2.1. 第一层 (C1) &#xff1a;卷积层&#xff08;Convolution Layer&#xff09;2.2. 第二层 (S2) &#xff1a;池化层&#xff08;Pooling Layer&#xff09;2.3. 第三层&#xff08;C3&#xff09;&#xff1a;…

【LLM】MCP(Python):实现 stdio 通信的Client与Server

本文将详细介绍如何使用 Model Context Protocol (MCP) 在 Python 中实现基于 STDIO 通信的 Client 与 Server。MCP 是一个开放协议&#xff0c;它使 LLM 应用与外部数据源和工具之间的无缝集成成为可能。无论你是构建 AI 驱动的 IDE、改善 chat 交互&#xff0c;还是构建自定义…

Docker 安装 Elasticsearch 教程

目录 一、安装 Elasticsearch 二、安装 Kibana 三、安装 IK 分词器 四、Elasticsearch 常用配置 五、Elasticsearch 常用命令 一、安装 Elasticsearch &#xff08;一&#xff09;创建 Docker 网络 因为后续还需要部署 Kibana 容器&#xff0c;所以需要让 Elasticsearch…