Other

[数学基础] 4 欧几里得算法&扩展欧几里得算法

欧几里得算法 欧几里得算法基于的性质: 若\(d|a, a|b\),则\(d|(ax+by)\) \((a,b)=(b,a~mod~b)\) 第二条性质证明: \(\because a~mod~b=a-\lfloor \frac{a}{b} \rfloor\times b\),令\(c=\lfloor \frac{a}{b} \rfloor\) 则问题等价于证明\((a,b)=(b,a-c\times b)\) 这个证明方法就和裴蜀定理的证明差不多。 证明:令\(d=gcd(a,b)\),则\(d|a,d|b\),易得\(d|(a-c\times b)\)。则\(d\)为\(b,(a-c\times b)\)的公因数。 那么令\(D=(b,a-c\times b)\),\(d\leq D\)。 \(D|b,D|(a-c\times b)\),易得\(D|a\),则\(D\leq (a,b)=d\)。 因此\(d=D\),即\(d=gcd(b,a-c\times b)\) 欧几里得算法模板 int gcd(int a, int b){ return b ? gcd(b, a % b) : a; } 扩展欧几里得算法 1. 前置知识-裴蜀定理 裴蜀定理:\(\forall a,b\in \Z\),令\(d=(a,b)\),那么对于任意的整数\(x,y\in \Z\),\(ax+by=kd\)。特别的,一定\(\exist x,y\),使得\(ax+by=d\)成立。 丢番图方程\(ax+by=m\)有解,当且仅当\(m\)是\(d\)的倍数。丢番图方程有解时必然有无穷多个解,每组解\(x,y\)都称为裴蜀数,可用辗转相除法求得。 证明: (前半句)\(\because d|a,d|b\),\(\therefore \forall x,y\in Z, d|(ax+by)\) (特别的...)设\(s\)为\(ax+by\)的最小正值,令\(q=\lfloor \frac{a}{s} \rfloor\),\(r=a ~mod ~s\)。

MySQL(五)

内容概要 python操作MySQL SQL注入问题 修改表SQL语句补充 视图、触发器、存储过程 事务 流程控制、函数 索引与慢查询优化 python操作MySQL python中支持操作MySQL的模块很多 其中最常见的当属'pymysql' # pymysql属于第三方模块 pip3 install pymysql # 基本使用 import pymysql # 1.链接服务端 con_obj = pymysql.connect( host='127.0.0.1', # MySQL服务端地址 port=3306, # MySQL默认PORT地址(端口号) user='root', # 用户名 password='123456', # 密码 也可以简写成 passwd database='lrean', # 库名 可以简写成db charset='utf8' # 字符编码 千万不要加杠utf-8 ) # 2.产生获取命令的游标对象 cursor = con_obj.cursor( cursor=pymysql.cursors.DictCursor ) # 3.编写SQL语句 sql = 'show tables' # sql1 = 'select * from teacher;' # SQL语句会被高亮显示 不用惊慌 # sql1 = 'select * from score;' # SQL语句会被高亮显示 不用惊慌 # 4.

Linux命令大全

关机/重启/注销 常⽤命令作⽤ shutdown -h now 即刻关机 shutdown -h 10 10分钟后关机 shutdown -h 11:00 11:00关机 shutdown -h +10 预定时间关机(10分钟后) shutdown -c 取消指定时间关机 shutdown -r now 重启 shutdown -r 10 10分钟之后重启 shutdown -r 11:00 定时重启 reboot 重启 init 6 重启 init 0 ⽴刻关机 telinit 0 关机 poweroff ⽴刻关机 halt 关机 sync buff数据同步到磁盘 logout 退出登录Shell 系统信息和性能查看 常⽤命令作用 uname -a查看内核/OS/CPU信息 uname -r 查看内核版本 uname -m 查看处理器架构 arch 查看处理器架构 hostname 查看计算机名 who 显示当前登录系统的⽤户 who am i 显示登录时的⽤户名 whoami 显示当前⽤户名 cat /proc/version 查看linux版本信息 cat /proc/cpuinfo 查看CPU信息 cat /proc/interrupts 查看中断 cat /proc/loadavg 查看系统负载 uptime 查看系统运⾏时间、⽤户数、负载 env 查看系统的环境变量 lsusb -tv 查看系统USB设备信息 lspci -tv 查看系统PCI设备信息 lsmod 查看已加载的系统模块 grep MemTotal /proc/meminfo 查看内存总量 grep MemFree /proc/meminfo 查看空闲内存量 free -m 查看内存⽤量和交换区⽤量 date 显示系统⽇期时间 cal 2021 显示2021⽇历表 top 动态显示cpu/内存/进程等情况 vmstat 1 20 每1秒采⼀次系统状态,采20次 iostat 查看io读写/cpu使⽤情况 sar -u 1 10 查询cpu使⽤情况(1秒⼀次,共10次) sar -d 1 10 查询磁盘性能 磁盘和分区 ⽤户和⽤户组 常⽤命令作⽤ useradd codesheep 创建⽤户 userdel -r codesheep 删除⽤户 usermod -g group_name user_name 修改⽤户的组 usermod -aG group_name user_name 将⽤户添加到组 usermod -s /bin/ksh -d /home/codepig–g dev codesheep 修改⽤户codesheep的登录Shell、主⽬录以及⽤户组 groups test 查看test⽤户所在的组 groupadd group_name 创建⽤户组 groupdel group_name 删除⽤户组 groupmod -n new_name old_name 重命名⽤户组 su - user_name 完整切换到⼀个⽤户环境 passwd 修改⼝令 passwd codesheep 修改某⽤户的⼝令 w 查看活动⽤户 id codesheep 查看指定⽤户codesheep信息 last 查看⽤户登录⽇志 crontab -l 查看当前⽤户的计划任务 cut -d: -f1 /etc/passwd 查看系统所有⽤户 cut -d: -f1 /etc/group 查看系统所有组 ⽹络和进程管理 常⽤命令作⽤ ifconfig 查看⽹络接⼝属性 ifconfig eth0 查看某⽹卡的配置 route -n 查看路由表 netstat -lntp 查看所有监听端⼝ netstat -antp 查看已经建⽴的TCP连接 netstat -lutp 查看TCP/UDP的状态信息 ifup eth0 启⽤eth0⽹络设备 ifdown eth0 禁⽤eth0⽹络设备 iptables -L 查看iptables规则 ifconfig eth0 192.

Mysql区分度很差是否有必要建索引

一般而言区分度很差的字段没必要建索引,但是这种也要视情况而定。 原因 存储引擎底层,我们经常听到,不走索引而走全表扫描。那么底层为什么不走索引而走全表扫描。 这里涉及到聚集索引和非聚集索引,对于非聚集索引值,查询的字段如果包含非索引字段,就会通过聚集索引主键从聚集索引中查询出需要查询出来的数据,也就是我们常说的回表。 回表的结果就是不仅需要扫描一次索引表,还要回表查询完整数据,这里就会造成,全表扫描甚至比走索引还要快。 什么情况可以建索引 这里其实可以考虑一点,如果查询出来的数据的结果,相对于全表而言较小,那么回表的速度是不是比全表扫描的速度快。所以考虑是否建立索引,那就考虑 查询的结果集与全部数据集的比值 场景 不建索引的场景 查询性别(性别要么是男,要么是女,数据基本5 5开) 建立索引的场景 状态扭转(支付状态,我们数据最终都会是失败或者成功,但是我们大部分操作的是支付中的数据)

MySQL高级优化

1. MySQL_简介 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB(创始人Michael Widenius)公司开发,2008被Sun收购(10亿美金),2009年Sun被Oracle收购。MariaDB MariaDB基于事务的Maria存储引擎,替换了MySQL的MyISAM存储引擎; 它使用了Percona的 XtraDB代替了InnoDB存储引擎。 MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。 MySQL是开源的,所以你不需要支付额外的费用。 MySQL是可以定制的,采用了GPL(GNU General Public License)协议,你可以修改源码来开发自己的MySQL系统。 MySQL支持大型的数据库。可以处理拥有上千万条记录的大型数据库。 MySQL支持大型数据库,支持5000万条记录的数据仓库,32位系统表文件最大可支持4GB,64位系统支持最大的表文件为8TB。 MySQL使用标准的SQL数据语言形式。 MySQL可以允许于多个系统上,并且支持多种语言。这些编程语言包括C、C++、C#、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等。 2. MySQL架构_逻辑架构 (1)连接层 最上层是一些客户端和连接服务,包含本地socket通信和大多数基于客户端/服务端工具实现的类似于tcp/ip的通信。 主要完成一些类似于连接处理、授权认证、及相关的安全方案。 在该层上引入了线程池的概念,为通过认证安全接入的客户端提供线程。 同样在该层上可以实现基于SSL的安全链接。服务器也会为安全接入的每个客户端验证它所具有的操作权限。 (2)服务层 第二层架构主要完成大多数的核心服务功能,如SQL接口,并完成缓存的查询,SQL的分析和优化及部分内置函数的执行。 所有跨存储引擎的功能也在这一层实现,如过程、函数等。 在该层,服务器会解析查询并创建相应的内部解析树,并对其完成相应的优化:如确定查询表的顺序,是否利用索引等,最后生成相应的执行操作。 如果是select语句,服务器还会查询内部的缓存。如果缓存空间足够大,这样在解决大量读操作的环境中能够很好的提升系统的性能。 2.1 Management Serveices & Utilities: 系统管理和控制工具 2.2 SQL Interface: SQL接口 · 接受用户的SQL命令,并且返回用户需要查询的结果。比如select from就是调用SQL Interface 2.3 Parser: 解析器 · SQL命令传递到解析器的时候会被解析器验证和解析。 2.4 Optimizer: 查询优化器。 · SQL语句在查询之前会使用查询优化器对查询进行优化。 2.5 Cache和Buffer: 查询缓存。 · 如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。 · 这个缓存机制是由一系列小缓存组成的。比如表缓存,记录缓存,key缓存,权限缓存等 (3)引擎层 存储引擎层,存储引擎真正的负责了MySQL中数据的存储和提取,服务器通过API与存储引擎进行通信。不同的存储引擎具有的功能不同,这样我们可以根据自己的实际需要进行选取。后面介绍MyISAM和InnoDB (4)存储层 数据存储层,主要是将数据存储在运行于裸设备的文件系统之上,并完成与存储引擎的交互。 (5)利用show profiles 查看sql的执行周期 了解查询语句底层执行的过程:查看是否开启计划。

Golang 实现 Redis(11): RDB 文件解析

RDB 文件使用二进制方式存储 Redis 内存中的数据,具有体积小、加载快的优点。本文主要介绍 RDB 文件的结构和编码方式,并借此探讨二进制编解码和文件处理方式,希望对您有所帮助。 本文基于 RDB version9 编写, 完整解析器源码在 github.com/HDT3213/rdb RDB 文件的整体结构 如下图所示,我们可以将 RDB 文件划分为文件头、元属性区、数据区、结尾四个部分: 文件头包含 Magic Number 和版本号两部分 RDB文件以 ASCII 编码的 'REDIS' 开头作为魔数(File Magic Number)表示自身的文件类型 接下来的 4 个字节表示 RDB 文件的版本号,RDB 文件的版本历史可以参考:RDB_Version_History 元属性区保存诸如文件创建时间、创建它的 Redis 实例的版本号、文件中键的个数等信息 数据区按照数据库来组织,开头为当前数据库的编号和数据库中的键个数,随后是数据库中各键值对。 Redis 定义了一系列 RDB_OPCODE 来存储一些特殊信息,在下文中遇到各种 OPCODE 时再进行说明。 元属性区 元属性区数据格式为:RDB_OPCODE_AUX(0xFA) + key + value, 如下面的示例: 5245 4449 5330 3030 39fa 0972 6564 6973 REDIS0009..redis 2d76 6572 0536 2e30 2e36 fa0a 7265 6469 -ver.

PowerShell: Completion

 Installing Node.js via package manager | Node.js (nodejs.org)  GitHub - Schniz/fnm: 标签:Completion,--,CompletionResult,CompletionResultType,version,ParameterName,new,Po 来源: https://www.cnblogs.com/dissipate/p/16250962.html

关于Windows10安装JDK11后原来配置的JDK8环境变量不生效问题

从Oracle官网下载了JDK11的Windows x64 Installer安装包,原来是装的JDK8的(通过压缩包解压后的方式安装的),自己配置了JAVA_HOME等环境变量,发现安装JDK11后,从CMD窗口查询的JDK版本变成了11。 解决:编辑Windows环境变量,选择系统变量Path,找到C:\Program Files (x86)\Common Files\Oracle\Java\javapath删除(这个目录下有三个exe文件,java/javaw/javaws,JDK11),删除后打开CMD命令窗口查询Java版本,自己原来配置的环境变量生效。  

linux常用命令二

mkdir (make directory) 创建文件夹 解释:Create the DIRECTORY(ies), if they do not already exist。(创建不存在的文件夹,如果存在则创建失败) mkdir 文件夹名称 创建单个文件夹 mkdir {文件夹1,文件夹2,文件夹3,....} 一次性创建多个文件夹 mkdir 文件夹{1..100} 创建文件1,文件夹2,文件夹3...文件夹100 (一次性创建100个文件夹) mkdir -p 文件夹1/文件夹2/文件夹3 递归式创建文件夹,父类与与子类文件夹一起创建(如果文件夹都存在则创建失败) mkdir test01 mkdir {test02,test03} nkdir aa{1..5} mkdir -p bb/bb1/bb2 rm (remove) 删除(移除)文件或者多个文件(重要命令) 解释:Remove (unlink) the FILE(s) 删除文件 rm -f 强制删除,忽略不存在的文件,不提示确认。 rm -i 删除前需要确认(删除提示)。 rm -I 在删除3个以上文件或者递归删除前要求确认。 rm -d 删除空目录,有提示。 rm -r 递归删除目录及内容,有提示。 rm -v 详细显示进行的步骤。 rm aa.txt rm -i bb.

在Linux虚拟机中添加多个固定ip地址

1、右键点击设置2、点击添加,再点击网络适配器,最后点击完成。3、选择完成后的网络适配器,选择仅主机模式。4、用roott身份登录,用nmtui进行设置5、用回车键进入编辑连接,编辑新添加的ens35或ens376、使“自动”改为“手动”,“隐藏”改为“显示”。7、设置自己想要的固定ip地址(别忘了ip地址后面加上/24)最后回车确定。回车返回。8、回车启用连接9、选中刚刚的设置的ens35,回车启用即可(前面有*表示启用)。10、ping一下看是否能连接。11、最后输入systemctl restart network,使其能ssh远程连接。