分类
外汇操盘交易心得

Binary.com 经纪人审查和测试

人形魔芋 ​

二进制gcd(Binary gcd)

人形魔芋 ​

前置知识: \gcd (最大公约数),位运算

众所周知利用欧几里得算法(辗转相除法)可以做到在 \log 的时间复杂度内求出两个数的最大公约数

如果直接辗转相除硬求 \gcd 就会 T 得飞起,但是题解里那种方法 \Theta(值域) 预处理 \Theta(1) 查询又好麻烦,那么有没有一种更快的直接求两个数 \gcd 的方法呢?

二进制 \gcd 就是这样一种算法,它利用计算机优秀的二进制处理能力来计算 \gcd

假设现在我们需要求 \gcd(a,b) 满足 a,b>0

我们将 a,b 分为 5 种情况讨论

第一种, a=b 。显然 \gcd(a,b)=a=b

第二种, a=0 或 b=0 。根据最大公约数的定义当 b=0 时 \gcd(a,b)=\gcd(a,0)=a ,当 a=0 时 \gcd(a,b)=\gcd(b,0)=b

第三种, a,b 均为偶数。对于这种情况,显然 2 是公约数之一,直接将两个数都除以 2 ,再递归下去求 \gcd(\frac a2,\frac b2) 即可, \gcd(a,b)=2\cdot\gcd(\frac a2,\frac b2)

第四种, a,b 中有且仅有一个偶数。不妨设 a 是偶数,那么显然 2 不是公约数之一,直接将 a 除以 2 求 \gcd(\frac a2,b) 即可, \gcd(a,b)=\gcd(\frac a2,b)

第五种, a,b 均为奇数。不妨设 a>b ,那么有 \gcd(a,b)=\gcd(\frac2,b) ,为什么呢?下面来证明一下

设 a=k_1\gcd(a,b),\ b=k_2\gcd(a,b) 且 \gcd(k_1,k_2)=1 ,先考虑证明 \gcd(a-b,b)=\gcd(a,b) (即“更相减损术”)

a-b=(k_1-k_2)\gcd(a,Binary.com 经纪人审查和测试 b),\ b=k_2\gcd(a,b) ,那么有 \gcd(a-b,b)=\gcd(k_1-k_2,k_2)\cdot\gcd(a,b) ,即证 \gcd(k_1-k_2,k_2)=1

考虑反证法,假设 \gcd(k_1-k_2,k_2)=m 其中 m\in\mathbb,m>1 ,再设 k_1-k_2=t_1m,\ k_2=t_2m

就有 k_1=(t_1+t_2)m ,那么 \gcd(k_1,k_2)=m\cdot\gcd(t_1+t_2,t_2)>1 与 k_1,k_2 互质矛盾,得证 \gcd(k_1-k_2,k_2)=1

由于 a,b 均为奇数, a-b 就是偶数,那么问题就变成了和情况四一样, 2 显然不是公约数之一,故 \gcd(a,b)=\gcd(\frac2,b)

直接根据上图模拟,我们可以得到以下代码(注意: ~ 的运算优先级高于 | 和 & Binary.com 经纪人审查和测试 )

首先把两个数公约数中的所有 2 提出来,也就是把二进制末尾的 0 全部提出来,然后两个数就至少有一个是奇数,把两个数末尾的 0 再分别去掉就能保证一定是两个奇数,利用更相减损术循环求解就行,具体看代码

注意到每次还是都使用 while 来去除二进制下末尾的 0 ,效率低下,可以利用硬件函数 __builtin_ctz() 来继续加速

同时只有直接输入 0 时才可能 a=0 或是 b=0 ,所以如果输入保证不为 0 就可以去掉这个判断

这样我们就成功地利用 \Theta(\log n) 求 \gcd 切掉了 Luogu P5435 这道需要 \Theta(\text) 预处理 \Theta(1) 求 \gcd 的题目

MySQL主从复制详细介绍

TimeFriends 于 2022-08-18 13:45:18 发布 634 收藏 92

一、主从复制的目的

二、主从复制的原理和步骤

​ 简单的说就是master将数据库的改变写入binary log二进制日志,这个日志会记录下所有修改了数据库的SQL语句(insert,update,delete,grant等),slave同步这些二进制日志,并根据这些二进制日志进行数据操作,其实就是把主服务器上的binary log复制到从服务器上执行一遍,这样从服务器上的数据就和主服务器上的数据相同了。

5.从节点启动另外一个线程(sql Thread ),把replaylog中的事件读取出来,并在本地再执行一次。

图片

三、复制中线程的作用

Dump Thread:为每个Slave的I/O Thread启动一个dump线程,用于向从节点发送二进制事件。
如果从节点需要作为其他节点的主节点时,是需要开启二进制日志文件的。这种情况叫做级联复制。如果只是作为从节点,则不需要创建二进制文件。

四、主从复制配置过程

3.创建有复制权限的用户账号 replication slave。

图片

图片

· 添加:expire_logs_days=7(自动清理 7 天前的log文件,可根据需要修改)

图片

图片

4.3.4 在从节点配置访问主节点的参数信息
添加 主节点主机,访问主节点的用户名及密码,主节点二进制文件信息。

图片

4.3.5 查看从节点的状态信息
因为没有启动 从节点的复制线程,I/O线程和SQL 线程都为NO.

图片

使用start slave命令启动从节点的复制线程,再利用show slave status命令查看当前的从节点状态。

图片

图片

图片

图片

五、错误排查总结

图片

图片

  1. 查看是否使用了nat的网络结构到导致网络有问题,连接不上。
  2. 有可能my.cnf有问题,配置文件
  3. 授权的问题,replication slave和file权限是必须的。
  1. 查看是否使用了nat的网络结构到导致网络有问题,连接不上。
  2. 有可能my.cnf有问题,配置文件
  3. 授权的问题,replication slave和file权限是必须的。

关于MySQL主从复制,你学废了么?

真诚地邀请您加入我们的大家庭.
在这里不仅有技术知识分享,还有博主们之间的互帮互助
不定期发红包,每月更有抽奖环节,游戏机和实体书相赠(包邮)
让我们抱团取暖,抱团内卷.打造美好C站.期待您的加入.
备注 : CSDN-xxxxxx (xxxxxx代表你csdn的昵称)

来源:公众号「神谕的暗影长廊」 在异步或半同步的复制结构中,从库出现延迟是一件十分正常的事。 虽出现延迟正常,但是否需要关注,则一般是由业务来评估。 如:从库上有需要较高一致性的读业务,并且要求延迟小于某个值,那么则需要关注。 简单概述一下复制逻辑: 1、主库将对数据库实例的变更记录到binlog中。 2、主库会有binlog dump线程实时监测binlog的变更并将这些新的events推给从库(Master has sent all binlog to slave; waiting for more updates) 3、从库的IO Thread接收这些events,并将其记录入re

主要介绍MySQL主从复制配置心跳功能介绍,解决Slave has read all relay log; waiting for the slave I/O Binary.com 经纪人审查和测试 thread to update it问题,需要的朋友可以参考下