设 \(a,b\in \mathbb{Z},a\ne 0\)。如果 \(\exists q\in \mathbb{Z}\),使得 \(b=a\times q\),那么就说 \(b\) 可被 \(a\) 整除,记作 \(a\mid b\) ;\(b\) 不被 \(a\) 整除记作 \(a\nmid b\) 。
--------OI Wiki
整除的性质:
$a\mid b \Longleftrightarrow -a\mid b\Longleftrightarrow a\mid -b\Longleftrightarrow \left | a \right | \mid \left | b \right | $
\(a\mid b \wedge b\mid c\Longrightarrow a\mid c\)
\(a\mid b \wedge a\mid c \Longleftrightarrow \forall x,y\in \mathbb{Z},a\mid (x b+y c)\)
\(a\mid b\wedge b\mid a \Longrightarrow b=\pm a\)
设 \(m\ne 0\),那么 \(a\mid b \Longleftrightarrow ma\mid mb\)
设 \(b\ne 0\),那么 $a\mid b\Longrightarrow \left | a \right | \le \left | b \right | $
设 \(a\ne 0,b=qa+c\),那么 \(a\mid b\Longleftrightarrow a\mid c\)
约数(因数):若 \(a\mid b\),则称 \(b\) 是 \(a\) 的倍数,\(a\) 是 \(b\) 的约数。
\(0\) 是所有非 \(0\) 整数的倍数。对于整数 \(b\ne 0\) ,\(b\) 的约数有无限个。
平凡约(因)数:对于整数 \(b\ne 0,\pm 1、\pm b\) 是 \(b\) 的平凡约数,当 \(b=\pm 1\) 时,\(b\) 只有两个平凡约数。
对于整数 \(b\ne 0\) ,\(b\) 的其他约数称为真约数(真因数、非平凡约数)。
如果没有特别说明,约数总是指正约数
设 \(a,b\) 为两个给定的整数,\(a\ne 0\) 。设 \(d\) 是一个给定的整数。那么,一定存在唯一的一对整数 \(q,r\),满足 \(b=qa+r,d\le r<\left | a \right | +d\)。
无论 \(d\) 取何值,\(r\) 统称为余数。\(a\mid b\) 等价于 \(a\mid r\) 。
一般情况下 \(d\) 取 \(0\) ,此时等式 $b=qa+r,\le r< \left | a \right | $ 统称为带余除法。这里的余数 \(r\) 成为最小非负余数。
-------OI Wiki
\(a\div b=c...d\)
其中 \(a\) 是被除数,\(b\) 是除数,\(c\) 是商,\(d\) 是余数。
性质:
\(a=b\times c+d\)
\(b>d\ge 0\)
\(c=a/b,d=a\bmod b\)
\((a+b)\bmod c=(a\bmod c+b\mod c)\bmod c\) 同理减和乘也成立
任一整数被正整数 \(a\) 除后,余数一定是且仅是 \(0\) 到 \((a-1)\) 这 \(a\) 个数中的一个。
相邻的 \(a\) 个整数被正整数 \(a\) 除后,恰好取到上述 \(a\) 个余数。
对于四的证明:
设 \(a=x\times c+a',b=y\times c+b'\) 将这两个式子代入 \((a+b)\bmod c\) 后得到:\((x\times c+a'+y\times c+b')\bmod c\) 很显然最后剩下的是 \((a'+b')\bmod c\) ,而我们知道 \(a'=a\bmod c,b'=a\bmod c\) ,故得证。
一组整数的公约数,是指同时是这组数中每一个数的约数的数。
是任意一组整数的公约数。
一组整数的最大公约数,是指所有公约数里面最大的一个。
-------OI Wiki
最为常见的是辗转相除法,也叫欧几里得算法。
已知两个数 \(a,b\),如果 \(a>b\) ,那么 \(\gcd(a,b)=\gcd(b,a\bmod b)\)。
证明:
设 \(a=b\times k+c\),显然有 \(c=a\bmod b\)。设 \(d\mid a,d\mid b\),则 \(c=a-b\times k,\frac{c}{d}=\frac{a}{d}-\frac{b}{d}\times k\)。
\(\frac{c}{d}\) 一定是整数,即 \(d\mid c\),所以对于 \(a,b\) 的公约数,他也会是 \(b,a\bmod b\) 的公约数。
那么我们对于 c++ 就可以直接用递归或者 while 循环来实现。
Flutter系列文章连载~《FlutterAndroid工程结构及应用层编译源码深入分析》《Flutter命令本质之Fluttertools机制源码深入分析》《Flutter的runApp与三棵树诞生流程源码分析》《FlutterAndroid端Activity/Fragment流程源码分析》《FlutterAndroid端FlutterInjector及依赖流程源码分析》《FlutterAndroid端FlutterEngineJava相关流程源码分析》《FlutterAndroid端FlutterView相关流程源码分析》《Flutter绘制动机VSYNC流程源码全方位分析》背景前面系列我们依赖Android平台实现分析了端侧很多机制,但是有一个知识点一直比较迷糊,那就是Flutter是怎么被触发绘制的?这个问题在网上的答案基本都说VSYNC,但是少有人说这个VSYNC是怎么被关联起来的,本文就针对这个问题进行一个Platform到Engine到DartFramework分析,源码依赖Flutter2.2.3。Android平台Java层还记得我们前面系列文章分析过的io.flu
背景oc为基础创建的sdk混编工程,在被sdk关联的混编demo工程中swift文件调用时,会崩溃,提示找不到sdk中oc分类方法。常规的,在demo中设置-Objc和-all_load也还是会崩。工程配置:网上找了一圈都找不到能解决此问题的答案。峰回路转在微信群里提问后,经热心群友提示,尝试了forceload方法,不过还是不行。有感而发,联想到应该就是文件关联问题。于是尝试手动把编译出来的sdk包,拖进demo工程:再运行,真的可以了!不崩溃了!真好,感谢群友!小结把编译出的包放到linkbinarywithlibraries里,就可以了!只是设置demo的dependencies关联sdk工程是不够的。这算是混编sdk和混编demo工程的一个坑吧!在StackOverflow里也分享了这个坑,希望能帮到遇到类似问题的朋友: https://stackoverflow.com/questions/3998483/objective-c-category-causing-unrecognized-selector/68708892#68708892
大家好,这里记录,我每周碰到的,看到的,或想到的,引起触动,或感动的,事物的思考,不见得都对,但开始思考总是好的。到底什么让你醍醐灌顶在上一期,开始的时候,我写了一些当周看见的,让我“醍醐灌顶”的语句,想不到这周又看到了下面这句话。“这世界本就没有任何一句话,可以让你醍醐灌顶,真正叫你醍醐灌顶的,只能是一段经历,而那句话,只是火药仓库内划燃的一根火柴。”你说我这前后两次,是不是“遇见哲学”了。为了检验上面那句话呢,尤其是标粗的那句,我再摘抄一句“醍醐灌顶”,大家可以用来验证它的正确性。“人处在一种默默奋斗的状态,精神就会从琐碎的生活中得到升华。”你感受到那根火柴了吗。那么,你又猜猜,以上两句话都出自哪里呢。前置思维我们收到的物流货物时效越来越快,比如在京东上下单,大家的速度都可以感受到,那么这里面有一个原因之一就是以储代运,提前把我们的货物搬送到了距离我们最近的仓库了,也就是把货物前置了。其实为了提高我们浏览网站的速度,我们也采用了这样的思维方式,那就是CDN的处理方式。我们把一些静态资源,提前“放置”到了距离用户最近的地方,这些地方我们称为边缘节点。如下图所示,这是极客时间专栏《趣谈
1.焊接行业发展趋势焊接行业是关乎工业制造生产与维护服务的核心行业之一,是大型安装工程建设期间的一项关键工作,其进度直接影响到计划的工期,其质量的好坏直接影响到工程的安全运行和使用寿命,其效率的高低直接影响工程的建造周期和建造成本。为了减少人为因素对焊接质量的影响、提高生产效率就需要使焊接过程更加自动化和智能化,这也是焊接行业发展的必然趋势。焊接自动化、智能化的关键问题是焊缝的自动查找、自动跟踪,苏州博智慧达自主研发的3D激光焊缝跟踪系统可以轻松获取焊缝位置、焊缝偏转角度、焊缝宽度、高度、深度等信息,并支持市面上大部分机器人品牌的数据通讯,如FANUC、ABB、KUKA、安川、川崎等。将数据实时反馈至上位机,已达到最佳工艺控制要求。焊缝自动跟踪系统的作用是精确检测出焊缝的位置和形状信息并传递给焊枪(机器人)控制系统,控制系统根据检测结果调整焊枪位置,从而实现焊缝自动跟踪。2.工作原理激光焊缝跟踪传感器采用激光三角反射式原理,即激光束被放大形成一条激光线投射到被测物体表面上,反射光透过高质量光学系统,被投射到成像矩阵上,经过计算得到传感器到被测表面的距离(Z轴)和沿着激光线的位置信息(X
1需求在我的前后端分离的实验室管理项目中,有一个功能是学生状态统计。我的设计是按天统计每种状态的比例。为了便于计算,在每天0点,系统需要将学生的状态重置,并插入一条数据作为一天的开始状态。另外,考虑到学生的请假需求,请假的申请往往是提前做好,等系统时间走到实际请假时间的时候,系统要将学生的状态修改为请假。显然,这两个子需求都可以通过定时任务实现。在网上略做搜索以后,我选择了比较流行的定时任务框架Quartz。2QuartzQuartz是一个定时任务框架,其他介绍网上也很详尽。这里要介绍一下Quartz里的几个非常核心的接口。2.1Scheduler接口Scheduler翻译成调度器,Quartz通过调度器来注册、暂停、删除Trigger和JobDetail。Scheduler还拥有一个SchedulerContext,顾名思义就是上下文,通过SchedulerContext我们可以获取到触发器和任务的一些信息。2.2Trigger接口Trigger可以翻译成触发器,通过cron表达式或是SimpleScheduleBuilder等类,指定任务执行的周期。系统时间走到触发器指定的时间的时
说到RAM,相信大家都略知一二,但你知道各种RAM的原理及区别吗?一、引言在计算机的组成结构中,有一个很重要的部分,就是存储器。存储器是用来存储程序和数据的部件,对于计算机来说,有了存储器,才有记忆功能,才能保证正常工作。存储器的种类很多,按其用途可分为主存储器和辅助存储器。主存储器简称内存,内存在电脑中起着举足轻重的作用,一般采用半导体存储单元。因为RAM是内存其中最重要的存储器,所以通常我们直接称之为内存。内存就是存储程序以及数据的地方,比如当我们在使用WPS处理文稿时,当你在键盘上敲入字符时,它就被存入内存中;当你选择存盘时,内存中的数据才会被存入硬盘。二、关于RAM RAM:RandomAccessMemory,随机存取存储器。RAM也叫内存、主存,是与CPU直接交换数据的内部存储器,它可以随时读写(刷新时除外),而且速度很快(相对Flash)。RAM特点:1、随机存取所谓“随机存取”,指的是当存储器中的数据被读取或写入时,所需要的时间与这段信息所在的位置或所写入的位置无关。相对的,读取或写入顺序访问存储设备中的信息时,其所需要的时间与位置就会有关系。它主要用来存放操作系统、各
科学Sciences导读:人工智能达特茅斯夏季研究项目提案(1955年8月31日)中英对照版。全文分为六大部分:一、提案说明,二、C.E.香农(C.E.Shannon)的研究提案,三、M.L.明斯基(M.L.Minsky)的研究提案,四、N.罗切斯特(N.Rochester)的研究提案,五、约翰·麦卡锡(JohnMcCarthy)的研究提案,六、对人工智能问题感兴趣的人。译后只校对了一遍,不妥之处请看后面附的原文再次校正或留言。公号输入栏发送“AI达特茅斯1955提案”获取本PDF资料;欢迎大家赞赏支持科普、下载学习科技知识。人工智能达特茅斯夏季研究项目提案(1955年8月31日)中英对照版(36k字)目录 人工智能达特茅斯夏季研究项目提案(1955年8月31日)中译版APROPOSALFORTHEDARTMOUTHSUMMERRESEARCHPROJECTONARTIFICIALINTELLIGENCE素材(880字)人工智能达特茅斯夏季研究项目提案(1955年8月31日)中译版APROPOSALFORTHEDARTMOUTHSUMMERRESEARCHPROJECTONARTIFI
又是熟悉的凌晨,微信小程序又开放了一个新能力。而这一次的开放,是自小程序上线以来,我们就期待已久的重磅开放:微信小程序支持开发者添加与业务相关的自定义关键词。同时,开发者可以在小程序后台,查看自定义关键词带来的访问次数。自定义关键词,究竟会对小程序的搜索结果造成多大的影响?又应该如何添加?现在,知晓程序就来为你一一解密。关注「知晓程序」公众号,微信后台回复「新能力」,获取小程序新能力全解读。如何添加关键词,才不会踩坑?要添加关键词,很简单。1.进入到小程序后台,点击「推广」;2.选择「添加关键词」,输入完成后提交审核。在这里需要注意的是,每个小程序最多可以输入10个关键词,而这10个关键词必须一次性添加后,再提交审核。假如仅添加了1个关键词就提交,那就只能等7个工作日,审核通过之后,才能再添加其它关键词。但是,7天的时间已经足以错过流量红利巅峰期,因而,关键词添加需谨慎。添加关键词的操作不难,真正难的是,要添加什么样的关键词。假如你一时半会没想好,想要更改,则比较麻烦了。除了需要等待7个工作日的审核时间之外,微信还规定,自定义关键词每30天仅能修改3次。如果你有修改的需要,就要注意一下
题目要求:有一个四则运算的字符串表达式,编写一个函数,计算四则运算的结果PHP实现:1 <?php 2 3 /** 4 * 计算四则运算表达式 5 */ 6 7 error_reporting(E_ALL); 8 9 $exp = '(1+2*(3+5)/4)*(3+(5-4)*2)'; 10 $arr_exp = array(); 11 12 for($i=0;$i<strlen($exp);$i++){ 13 $arr_exp[] = $exp[$i]; 14 } 15 $result = calcexp( array_reverse($arr_exp) ); 16 echo $exp . '=' . $result; 17 18 function calcexp( $exp ){ 19 $arr_n = array(); 20 $arr_op = array(); 21 22 while( ($s = array_pop( $exp )) != '
前言回顾前面:多线程三分钟就可以入个门了!Thread源码剖析多线程基础必要知识点!看了学习多线程事半功倍Java锁机制了解一下只有光头才能变强!本来我是打算在这章节中写Lock的子类实现的,但看到了AQS的这么一个概念,可以说Lock的子类实现都是基于AQS的。AQS我在面试题中也见过他的身影,但一直不知道是什么东西。所以本篇我就来讲讲AQS这个玩意吧,至少知道它的概念是什么,对吧~那么接下来我们就开始吧~一、AQS是什么?首先我们来普及一下juc是什么:juc其实就是包的缩写(java.util.concurrnt)不要被人家唬到了,以为juc是什么一个牛逼的东西。其实指的是包而已~我们可以发现lock包下有三个抽象的类:AbstractOwnableSynchronizerAbstractQueuedLongSynchronizerAbstractQueuedSynchronizer通常地:AbstractQueuedSynchronizer简称为AQS我们Lock之类的两个常见的锁都是基于它来实现的:那么我们来看看AbstractQueuedSynchronizer到底是什么,
在微服务的浪潮下,如何根据企业自身的业务特点,合理的运用开源技术落地微服务架构成为关键。本文作者认为,在实施微服务架构的过程中,结合企业自身业务特点落地的微服务架构即是最佳实践。一、微服务架构产生的背景近十年中,互联网给我们生活带来了翻天覆地的变化,消费者的生活方式日益数字化,人们可以在任何时间、任何地点利用网络进行购物体验,运用社交媒体进行自我表达,企业也在运用多种技术手段,发挥数字化潜力,改善客户联系,促进企业业务模式的转型。在这种背景下,互联网也好,传统企业也罢,都面临一个共同的需求:面对快速变化的需求,面对业务模式的升级,如何构建出灵活的,可扩展,可重用的系统?前几年我们常用的三层应用架构,经常会将系统落地成单块应用,所有的功能都运行在一个进程中,各个模块之间的功能是强依赖的,修改一个模块的功能很容易导致其他模块出现问题,而且一旦需要将系统发布必须做一次全量发布,发布周期长。如果团队中加入新人,对系统的学习成本也很高,需要了解完整个系统才能进行开发。在这种情况下,如何将系统进行拆分,使得各个模块独立衍化成为关键。近几年随着容器技术的发展,其中以docker容器技术为代表,一时间
1.接口描述接口请求域名:tcss.tencentcloudapi.com。 容器网络集群查看Yaml网络策略详情 默认接口请求频率限制:20次/秒。 APIExplorer提供了在线调用、签名验证、SDK代码生成和快速检索接口等能力。您可查看每次调用的请求内容和返回结果以及自动生成SDK调用示例。 2.输入参数以下请求参数列表仅列出了接口请求参数和部分公共参数,完整公共参数列表见公共请求参数。 参数名称 必选 类型 描述 Action 是 String 公共参数,本接口取值:DescribeNetworkFirewallPolicyYamlDetail。 Version 是 String 公共参数,本接口取值:2020-11-01。 Region 否 String 公共参数,本接口不需要传递此参数。 Id 是 Integer 策略Id 3.输出参数 参数名称 类型 描述 ClusterId String 集群Id PolicyName String 策略名 Yaml String base64编码的yaml字符串注意:
1、 服务端安装JProfiler(与客户端版本一致) 2、 客户端配置连接: A)、session——integrationwizards——Newremoteintegration B)、选择远程监控的平台windows,点击next C)、选择jdk版本,如果服务器是64位的jdk则勾上64bitjvm,点击next D)、选择等待连接,点击next E)、输入服务端ip地址,点击next F)、输入服务端机器上的jprofiler的安装路径,点击next G)、端口默认8849,点击next H)、提示需要在服务端插入下面的启动命令:-agentpath:C:\jprofiler7\bin\windows\jprofilerti.dll=port=8849 客户端配置完成 3、 服务端,在C:\jboss-4.2.3.GA(2)\jboss-4.2.3.GA\bin下面编辑run.bat 加入下面的启动项-agentpath:C:\jprofiler7\bin\win
*Thisexampleprogramshowshowfit_rectangle2_contour_xldcanbeusedto *detectmanufacturingerrorsofpunchedholesinametalpart.Theerrors *showupassmallprotrusionsofthemetalintothehole.Theycanbedetected *byfittingrectanglestotheedgesoftheholerobustly(i.e.,withoutlier *suppression)andthecalculatingthedistancesoftheedgestotherectangle *sidesusingdist_rectangle2_contour_points_xld.Sincethecornersofthe *holesareslightlyrounded,someextraprocessingmustbeperformedto *disregardthecornersinthecheckforerrors. dev
1,Spring指定datasource a) 参考文档,找dbcp.BasicDataSource(3种方式) c3p0 dbcp(数据库连接池) proxool b) 在DAO或者Service中注入dataSource @Component("u") publicclassUserDAOImplimplementsUserDAO{ privateDataSourcedataSource; publicDataSourcegetDataSource(){ returndataSource; } @Resource publicvoidsetDataSource(DataSourcedataSource){ this.dataSource=dataSource; } publicvoidsave(Useruser)
一、hector hector采用泰勒展开近似优化激光雷达数据的匹配过程,因此两次激光雷达采集数据时位姿变化不能太大,否则余项误差过大,造成建图失败——这也是为什么在hector论文中需要使用到扫描频率高达40Hz的激光雷达,如果使用10Hz的激光雷达,很容易建图失败(尤其在转向速度较大的时候)。 二、gmapping gmapping采用粒子滤波方法,但其基本匹配过程仍然是通过odom获得初始位姿估计,然后迭代比较(scanmatcher)优化激光雷达数据的匹配过程,其匹配范围可以简单地通过(步长*迭代次数)确定,意味着超过迭代范围的误差将导致建图失败,因此如果odom是通过简单的差速计算得到的,那么在转向速度较大的时候,odom误差将急剧增加,很容易导致建图失败,可以通过卡尔曼滤波(robot_pose_ekf等)加入惯导数据提高odom的精度,从而提高gmapping实际建图过程中的稳定性。
偶然碰到一个小Bug ajax请求执行后返回了一个canceled(状态码) 但是后台却接受了参数并且执行成功0。0 刚看到这个状态的时候是一脸懵逼的、、、、 之前并没见过这样的状态码 经过参数确认并且再三确认 并没有发现什么异常、、、、 后来发现Url在请求的时候被莫名其妙的带上了些参数 经过检查html代码发现莫名其妙的出现了一个form标签 而我的提交按钮绝然还是个submit!! 没错,我在给人家擦屁股 原因 究其原因 仅仅是因为formaction事件与绑定与submit按钮上的click事件同时触发。 formaction将表单内容以参数的形式追加到了url的末尾 而url变更则会导致页面重新加载 而这恰恰就是导致post请求在执行后就立即被终止的罪魁祸首!! 小结 1.在URL变更后,会对当前正在执行的ajax进求进行中止操作 2.在使用到ajax的时候,尽量不要在form内使用submit进行提交
initializationError(com.example.demo.DemoApplicationTests)Timeelapsed:0.002sec<<<ERROR! java.lang.IllegalStateException:Unabletofinda@SpringBootConfiguration,youneedtouse@ContextConfigurationor@SpringBootTest(classes=...)withyourtest atorg.springframework.util.Assert.state(Assert.java:70) 复制 由于包名不一致造成的,删除example包,或改成对应的报名即可
GivenasequenceofKintegers{N1,N2,...,NK }.Acontinuoussubsequenceisdefinedtobe{Ni,Ni+1,...,Nj }where1<=i<=j<=K.The MaximumSubsequence isthecontinuoussubsequencewhichhasthelargestsumofitselements.Forexample,givensequence{-2,11,-4,13,-5,-2},itsmaximumsubsequenceis{11,-4,13}withthelargestsumbeing20. Nowyouaresupposedtofindthelargestsum,togetherwiththefirstandthelastnumbersofthemaximumsubsequence. InputSpecification: Eachinputfilecontainsonetestcase.Eachcaseoccupiestwoline
model代码如下: @OneToMany(fetch=FetchType.EAGER,cascade=CascadeType.ALL) @Where(clause="isValid=1andorderType=1") @JoinColumn(name="orderUUID",referencedColumnName="JobShippingOrderUUID",insertable=false,updatable=false) publicList<BoJobgoods>getBoJobgoodsList(){ returnboJobgoodsList; } @OneToMany(fetch=FetchType.EAGER,cascade=CascadeType.ALL) @Where(clause="isValid=1andorderType=1") @JoinColumn(name="orderUUID",referencedColumnName="JobShippingOrderUUID",insertable=false,updatable=false) pu