中国剩余定理(CRT)可以求解如下形式的一元线性同余方程组(其中 \(n_{1},n_{2},\dots,n_{k}\) 两两互质)
\[\left\{\begin{matrix} x\equiv a_{1}\pmod{n_{1}}\\ x\equiv a_{2}\pmod{n_{2}}\\ \vdots\\ x\equiv a_{k}\pmod{n_{k}} \end{matrix}\right. \]计算所有模数的积 \(n\)
对于第 \(i\) 个方程:
计算 \(m_{i}=\frac{n}{n_{i}}\);
计算 \(m_{i}\) 在模 \(n_{i}\) 意义下的逆元 \(m_{i}^{-1}\)
计算 \(c_{i}=m_{i}m_{i}^{-1}\) (不要对 \(n_{i}\) 取模)
方程组在模 \(n\) 意义下的唯一解为 \(x=\sum_{i=1}^{k}a_{i}c_{i}\pmod{n}\)
我们需要证明上面算法计算所得的 \(x\) 对于任意 \(i=1,2,\dots,k\) 满足 \(x\equiv a_{i}\pmod{n_{i}}\)
当 \(i\ne j\) 时,有 \(m_{j}\equiv 0\pmod{n_{i}}\) ,故 \(c_{j}\equiv m_{j}\equiv 0\pmod{n_{i}}\) 又有 \(c_{i}\equiv m_{i}\times (m_{i}^{-1}\bmod{n_{i}})\equiv 1\pmod{n_{i}}\),所以我们有:
\[x\equiv \sum_{j=1}^{k}a_{j}c_{j} \pmod{n_{i}}\\ \equiv a_{i}c_{i}\pmod{n_{i}}\\ \equiv a_{i}\times m_{i}\times(m_{i}^{-1}\bmod{n_{i}})\pmod{n_{i}}\\ \equiv a_{i}\pmod{n_{i}} \]其中 \(m_{i}^{-1}\) 表示 \(m_{i}\) 的逆元。
即对于任意 \(i=1,2,\ldots,k\),上面算法提到的 \(x\) 总是满足 \(x\equiv a_{i}\pmod{n_{i}}\),即证明了解同余方程组的算法的正确性。
因为我们没有对输入的 \(a_{i}\) 作特殊限制,所以任何一组输入都对应一个解 \(x\)
另外,若 \(x\ne y\),则总存在 \(i\) 使得 \(x\) 和 \(y\) 在模 \(n_{i}\) 下不同余
故系数列表 \(\{a_{i}\}\) 与解 \(x\) 之间是一一映射关系,方程组总是有唯一解
P1495【模板】中国剩余定理(CRT)/ 曹冲养猪 - 洛谷
参考代码:
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,r[11],m[11],mi[11],M=1,ans;
inline void exgcd(int a,int b,int &x,int &y)//扩欧求逆元
{
if(b==0){x=1,y=0;return;}
exgcd(b,a%b,x,y);
int z=x;x=y;y=z-y*(a/b);
}
signed main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>m[i];
M*=m[i];
cin>>r[i];
}
for(int i=1;i<=n;i++)
{
mi[i]=M/m[i];
int x=0,y=0;
exgcd(mi[i],m[i],x,y);//计算mi[i]在模m[i]意义下的逆元x
if(x<0)x+=m[i];//有可能是负数,加上模数即可
ans+=r[i]*mi[i]*x;//累加答案
}
cout<<(ans%M)<<endl;
return 0;
}
CRT的另一个用途是用一组比较小的质数来表示一个大的整数。
例如,若 \(a\) 满足如下线性方程组,且 \(a<\prod_{i=1}^{k}P_{i}\) (其中 \(P_{i}\) 为质数):
\[\left\{\begin{matrix} a\equiv a_{1}\pmod{p_{1}}\\ a\equiv a_{2}\pmod{p_{2}}\\ \vdots\\ a\equiv a_{k}\pmod{p_{k}} \end{matrix}\right. \]我们可以用以下形式的式子(称作 \(a\) 的混合基数表示)表示 \(a\):
\[a=x_{1}+x_{2}p_{1}+x_{3}p_{1}p_{2}+\dots+x_{k}p_{1}\dots p_{k-1} \]Garner 算法将用来计算系数 \(x_{1},\dots,x_{k}\)。
令 \(r_{ij}\) 为 \(p_{i}\) 在模 \(p_{j}\) 意义下的逆:
\[p_{i}\times r_{ij}\equiv 1\pmod{p_{j}} \]把 \(a\) 带入我们得到的第一个方程:
\[a_{1}\equiv x_{1}\pmod{p_{1}} \]代入第二个方程得到:
\[a_{2}\equiv x_{1}+x_{2}p_{1}\pmod{p_{2}} \]方程两边减 \(x_{1}\),除 \(p_{1}\) 后得
\[a_{2}-x_{1}\equiv x_{2}p_{1}\pmod{p_{2}}\\ (a_{2}-x_{1})r_{1,2}\equiv x_{2}\pmod{p_{2}}\\ x_{2}\equiv (a_{2}-x_{1})r_{1,2}\pmod{p_{2}} \]类似地,我们可以得到:
上面的朴素 CRT 是求解
\[\left\{\begin{matrix} x\equiv a_{1}\pmod{n_{1}}\\ x\equiv a_{2}\pmod{n_{2}}\\ \vdots\\ x\equiv a_{k}\pmod{n_{k}} \end{matrix}\right. \]一类的同余方程组,但是如果 \(n_{1},n_{2},\dots,n_{k}\) 不互质的话怎么办?
据某位学长说扩展中国剩余定理跟中国剩余定理没半毛钱关系,一个是用扩展欧几里得,一个是用构造
首先我们从简单入手,考虑只有两个式子的情况
\[x\equiv a_{1}\pmod{n_{1}}\\ x\equiv a_{2}\pmod{n_{2}} \]将两个式子变形:
\[x=a_{1}+n_{1}k_{1}\\ x=a_{2}+n_{2}k_{2} \]联立:
\[a_{1}+n_{1}k_{1}=a_{2}+n_{2}k_{2} \]移项:
\[n_{1}k_{1}=a_{2}-a_{1}+n_{2}k_{2} \]在这里需要注意就是这个方程有解的条件是 \(\gcd(n_{1},n_{2})\mid(a_{2}-a_{1})\),因为后面会用到 \(\frac{a_{2}-a_{1}}{\gcd(n_{1},n_{2})}\) 这一项,如果不能整除会出现小数。
对于上面的方程,两边同除 \(\gcd(n_{1},n_{2})\)
\[\frac{n_{1}k_{1}}{\gcd(n_{1},n_{2})}= \frac{a_{2}-a_{1}}{\gcd(n_{1},n_{2})}+ \frac{n_{2}k_{2}}{\gcd(n_{1},n_{2})}\\ \frac{n_{1}}{\gcd(n_{1},n_{2})}k_{1}= \frac{a_{2}-a_{1}}{\gcd(n_{1},n_{2})}+ \frac{n_{2}}{\gcd(n_{1},n_{2})}k_{2}\\ \]转换一下:
\[\frac{n_{1}}{\gcd(n_{1},n_{2})}k_{1}\equiv \frac{a_{2}-a_{1}}{\gcd(n_{1},n_{2})}\pmod{ \frac{n_{2}}{\gcd(n_{1},n_{2})}} \]此时我们把 \(k_{2}\) 搞没了
同余式两边同除 \(\frac{n_{1}}{\gcd(n_{1},n_{2})}\)
\[k_{1}\equiv inv(\frac{n_{1}}{\gcd(n_{1},n_{2})},\frac{n_{2}}{\gcd(n_{1},n_{2})})\times \frac{a_{2}-a_{1}}{\gcd(n_{1},n_{2})}\pmod{\frac{n_{2}}{\gcd(n_{1},n_{2})}} \]\(inv(a,b)\) 表示 \(a\) 在模 \(b\) 意义下的逆元。
\[k_{1}\equiv inv(\frac{n_{1}}{\gcd(n_{1},n_{2})},\frac{n_{2}}{\gcd(n_{1},n_{2})})\times \frac{a_{2}-a_{1}}{\gcd(n_{1},n_{2})}+\frac{n_{2}}{\gcd(n_{1},n_{2})}\times y \]我们把开头的式子拿过来,把 \(k_{1}\) 代回去。
\[x=inv(\frac{n_{1}}{\gcd(n_{1},n_{2})},\frac{n_{2}}{\gcd(n_{1},n_{2})})\times \frac{a_{2}-a_{1}}{\gcd(n_{1},n_{2})}\times n_{1}+y\frac{n_{1}n_{2}}{\gcd(n_{1},n_{2})} +a_{1} \]\[x\equiv inv(\frac{n_{1}}{\gcd(n_{1},n_{2})},\frac{n_{2}}{\gcd(n_{1},n_{2})})\times \frac{a_{2}-a_{1}}{\gcd(n_{1},n_{2})}\times n_{1}+a_{1}\pmod{\frac{n_{1}n_{2}}{\gcd(n_{1},n_{2})}} \]此时,整个式子中的元素我们都知道了
这个式子可以看作是
\[x\equiv a\pmod{n} \]其中:
\[a=(inv(\frac{n_{1}}{\gcd(n_{1},n_{2})},\frac{n_{2}}{\gcd(n_{1},n_{2})}) \times \frac{a_{2}-a_{1}}{\gcd(n_{1},n_{2})})\%\frac{n_{2}}{\gcd(n_{1},n_{2})} \times n_{1}+a_{1} \]\[n=\frac{n_{1}n_{2}}{\gcd(n_{1},n_{2})} \]如果是多个式子可以逐个合并。
上面的式子如果你觉得又臭又长可以把 \(inv\) 及括号里的替换为用扩欧对两模数求逆元的 \(x\),他俩是一个数;\(n\) 也就是 \(\text{lcm}(n_{1},n_{2})\)。
P4777【模板】扩展中国剩余定理(EXCRT) - 洛谷
#include<bits/stdc++.h>
#define int __int128
#define N 100010
using namespace std;
int n,x,y,d;
inline int read(){int x=0,f=1;char ch=getchar();while(!isdigit(ch)){f=ch!='-';ch=getchar();}while(isdigit(ch)){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}return f?x:-x;}
inline void print(int x){if(x>=10)print(x/10);putchar(x%10+48);}
inline void exgcd(int a,int b,int &x,int &y)//扩欧求逆元
{
if(b==0)return d=a,x=1,y=0,void();//d是当前的ab的最大公约数
exgcd(b,a%b,x,y);
int z=x;x=y;y=z-y*(a/b);
}
inline int lcm(int a,int b){return a*b/__gcd(a,b);}//最小公倍数函数
int a,b,A,B;
inline void merge()//合并两个同余方程组
{
exgcd(a,A,x,y);//先求两个值的一组特解和最大公约数
int c=B-b;//计算两个式子的余数的差值
if(c%d)puts("-1"),exit(0);//如果是gcd的倍数说明分母后面是0无解
x=x*c/d%(A/d);//计算右半部分式子的值
if(x<0)x+=A/d;//如果小于0就加上模数
int mod=lcm(a,A);//计算新模数,A,a的最小公倍数
b=(a*x+b)%mod;//计算余数也就是新b的值,
if(b<0)b+=mod;//如果b小于0就直接加上模数
a=mod;//新的模数
}
signed main()
{
n=read();a=read();b=read();
for(int i=2;i<=n;i++)
{
int _A=read(),_B=read();//当前式子的模数,余数
A=_A,B=_B;
merge();//合并
}
print(b%a);
return 0;
}
部分参考自 OI Wiki
大家好,我是小魔龙,Unity3D软件工程师,VR、AR,虚拟仿真方向,不定时更新软件开发技巧,生活感悟,觉得有用记得一键三连哦。一、题目1、算法题目“给定一个整数n,求由n个节点组成的节点值从1到n的互不相同的搜索二叉树。”题目链接:来源:力扣(LeetCode)链接:96.不同的二叉搜索树-力扣(LeetCode)(leetcode-cn.com)2、题目描述给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。示例1: 输入:n=3 输出:5复制示例2: 输入:n=1 输出:1复制二、解题1、思路分析这道题95题【不同的二叉搜索树Ⅱ】很相似,不同的点在于这道题要找出互不相同的二叉搜索树。上一题我们使用了递归的方法,找出所有能构建的二叉搜索树,然后再在其中找出合法的二叉搜索树。而在遍历每个数字的过程中,可以将该数字作为树根,然后将1...i-1作为左子树,i+1...n作为右子树,然后按照同样的方式递归构建左子树和右子树。也就是把一个问题分成两个小问题,因此可以使用动态规划来解这道题:假设n个节点存在二叉
publicpartialclassUIElement:Visual,IInputElement,IAnimatable { publicvoidArrange(RectfinalRect) { //忽略很多代码 ArrangeCore(finalRect); } protectedvirtualvoidArrangeCore(RectfinalRect) { VisualOffset=newVector(finalRect.X,finalRect.Y); } }复制通过以上代码可以了解到,实际上的元素的偏移量仅仅只是相对于上层的元素而已,也就是说VisualOffset存放的值是相对于上层容器的偏移量,而不是相对于窗口的偏移量那么此属性是如何影响到元素的渲染的?在Visual类型里面,包含了Render方法,这就是Visual在渲染收集时进入的方法。需要知道的是,调用Visual的Render方法和UIElement的OnRender方法是没有直接联系的哦在开始之前,先来聊聊Visual的Render方法和UIElement的OnRender方法。在UIElement里面,将会
0x00前言简述基础概念工作原理组成部分应用场景0x01基础配置CDN入门配置CDN跨域设置CDN响应头参数(扩充)0x02边缘脚本与程序EdgeScript-边缘脚本EdgeRoutine-边缘程序0x03扩展说明CDN衡量指标CDN计费方式CDN响应头(各厂商)0x04F&Q(疑难杂症)1)CDN显示502网关超时问题。2)CDN解决Nginx后端服务器font字体文件跨域0x00前言简述基础概念Q:什么是CDN?A:CDN的全称是ContentDeliveryNetwork即内容分发网络(互联网世界的物流服务)。是建立并覆盖在承载网之上,由分布在不同区域的边缘节点服务器群组成的分布式网络,它可以帮助分担源站压力,避免网络拥塞,确保在不同区域、不同场景下加速网站内容的分发,提高资源访问速度。 简单的说:其通过广泛的网络节点分布,提供快速、稳定、安全、可编程的全球内容分发加速服务,支持将网站(动态、静态)、音视频、下载等内容分发至接近用户的节点。系统将源站内容分发至最接近用户的边缘节点之上,使用户可就近取得所需内容,提高用户访问的响应速度和成功率。Q:为啥要使用CDN?答:例
福哥答案2021-01-23:这道题复杂度太高,短时间内很难写出来。面试的时候不建议手撕代码。一个存节点的map+一个存桶的map+一个存桶的双向链表。桶本身也是一个双向链表。存节点的map:key是键,value是节点。存桶的map:key是次数,value是桶。代码用golang编写,代码如下:packagemain import( "container/list" "fmt" ) funcmain(){ cache:=Constructor(2) cache.Put(1,1) cache.Put(2,2) cache.Get(1)//返回1 cache.Put(3,3)//去除键2 cache.Get(2)//返回-1(未找到) cache.Get(3)//返回3 cache.Put(4,4)//去除键1 cache.Get(1)//返回-1(未找到) cache.Get(3)//返回3 cache.Get(4)//返回4 } typeLFUCachestruct{ Capint Lenint //map缓存,键存key,值存kv和
实现目标:用户自行上传自己的支付宝及微信收款二维码,在主题帖增加打赏按钮及浮窗。功能逻辑:利用后台自定义用户栏目实现用户上传二维码的功能,然后再在内容页加以判断、调用。修改步骤:1、如图增加两个上传收款码图片的自定义用户栏目(表单类型记得选择上传图片)2、打开模板文件\template\当前模板目录(默认为default)\forum\viewthread_node.htm查找:<!--{hook/viewthread_useraction}--在其上方增加以下代码即可<!--打赏-- <style .dsdz{display:inline-block;padding:10px18px;} .dsdzp{padding-bottom:10px;} .dsdzspan{float:left;text-align:center;font-weight:700;} .dsdzspanimg{width:160px;} </style <!--{eval$user_ds=C::t(common_member_profile)-fetch_all($post[aut
本文推荐知道的背景知识:Kubernetes的基本原理和各大组件的职责;Serverless计算的基本概念和它的优势;Plus:对社区Knative项目的基本了解;本文根据董一韬和王轲在KubeConNA2019大会分享整理。董一韬蚂蚁金服产品经理,致力于驱动云计算相关产品,包括云原生PaaS平台、容器与Serverless产品等,与最终顾客紧密合作,帮助客户在规模化的金融场景下采用与落地云原生相关解决方案。王轲蚂蚁金服软件工程师,建设基于Kubernetes/Knative的企业级Serverless产品,Knative的早期使用者,Kubernetes社区成员、控制面流控早期维护者,长期致力于用创新的方式优化、落地云原生技术。一、分享概要Knative是Google主导的基于Kubernetes的Serverless平台,在社区上有较高的知名度。然而,身为社区项目的Knative主要关心的是标准、架构。虽有先进的理念,却离可在生产上使用有不少的差距。本次KubeCon的演讲中,来自蚂蚁金服SOFAStack-PaaS平台产品技术团队的隐秀和仲乐与大家分享蚂蚁金服金融科技Knativ
01数制转换1、十进制数N和其他d进制数的转换是计算机实现计算的基本问题,其解决方法很多,其中一个简单算法基于下列原理:N=(Ndivd)*d+Nmodd(其中:div为整除运算,mod为求余运算)02括号匹配的检验1、假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序随意,即([]())或[([][])]等为正确的格式,[(])或(()]均为不正确的格式。03行编译程序1、一个简单的行编译程序的功能是:接受用户从终端输入的程序或数据,并存入用户的数据区。2、由于用户在终端上进行输入时,不能保证不出差错,因此,若在编译程序中,“每接收一个字符即存入用户数据区”的做法显然不是最恰当的。3、较好的做法是,设立一个输入缓冲区,用来接受用户输入的一行字符,然后逐个存入用户数据区。4、允许用户输入出差错,并在发现有误时可以及时更正。04迷宫求解·、求迷宫中从入口到出口的所有路径是一个经典的程序设计问题,由于计算机解迷宫时,通常用的是“穷举求解”的方法,即从入口出发,顺某一方向向前探索,若能走通,则继续往前走;否则沿原路退回,换一个方向再继续探索,直至所有可能的通路都探索到为止。05表达式
最近解决docker与宿主机同网段通信的问题,写此文章记录一下整个过程。 例如宿主机A和宿主机B是网络联通关系,在宿主机A上面创建了多个容器组成集群,但是我希望通过宿主机B也可以访问到宿主机A的容器,当然,你也可能会说,端口映射非常方便,如果我需要的端口比较多,或者着如果我临时需要增加某些端口,可能设置起来比较麻烦,那么如果我们将宿主机A里面的容器的IP与宿主机的IP在同一个网络,不就可以直接来进行互联互通了么。20160426153302696.jpeg1、安装Docker(Linux服务器)安装Dockeryuminstalldocker复制2、使用pipework为docker容器配置独立IP安装pipework这个工具可以使用一条命令就可以实现更改容器的IP,更准确来说为容器IP添加一个新的网卡。wgethttps://github.com/jpetazzo/pipework/archive/master.zip unzipmaster.zip cppipework-master/pipework/usr/local/bin/ chmod+x/usr/local/bin/pip
选自HackerNoon作者:DanielBourke机器之心编译参与:路、张倩、王淑婷机器学习工程师的职位并不只是为AI博士准备的:通过网络上公开的课程和视频,人们可以学习人工智能领域的基础知识、培养写代码的能力,最终找到AI领域的相关工作——只要你不轻言放弃。本文中,这位名为DanielBourke的小哥介绍了自己从零开始的心路历程。我曾经在苹果商店工作,我想要改变,那么就从自己服务的技术入手吧。我开始学习机器学习和人工智能——这个领域非常热门,每一周,谷歌、Facebook这样的科技公司都在推出新的AI技术,不断改善我们的体验。 现在也有数不清的自动驾驶汽车公司,虽然这项技术很好,但我并不喜欢驾驶,而且道路很危险。即使看到了今天正在发生的一切,我们仍然无法给出「人工智能」一词的明确定义。一些人认为深度学习可以被称为AI;另一些人则认为除非完全通过图灵测试,否则就不算AI。缺乏定义这一问题确实给我入门人工智能前期造成了很多麻烦,如果你在学的东西有很多种不同的定义,那么学习它真的很难起步。所以我们先抛开定义。我是如何起步的?我和朋友想创建一家互联网创业公司,结果失败了。我们觉得做这件
题目:HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续子序列的和,你会不会被他忽悠住?(子向量的长度至少是1)解答:参考连续子数组的最大和#-*-coding:utf-8-*- classSolution: defFindGreatestSumOfSubArray(self,array): #writecodehere max_sum,cur_sum=-0xffffff,0 foriinarray: ifcur_sum<=0: cur_sum=i else: cur_sum+=i ifcur_sum>max_sum: max_sum=cur_sum returnmax_sum复制
说起workflow大家肯定都不陌生,这里简单介绍一下salesforce中什么情况下使用workflow。当你分配许多任务,定期发送电子邮件,记录修改时,可以通过自动配置workflow来完成以上操作而不是手工做这些工作。一.WorkFlow配置 点击setup-->build-->create-->Workflow&Approvals-->workflowRules或者在搜索栏中搜索workflow然后选择workflowRules.选择后会出现下图的引导页,用来描述workflow组成部分以及Workflow可以自动执行哪些种类型的action。从图中可以看到,可以执行Tasks,EmailAlerts,FieldUpdates以及OutboundMessages.点击Continue后进入列表页面,此页面显示已经创建的所有的Workflowrules。从描述信息中可以看到Workflow的执行流程为,当一条记录满足workflowrule标准条件时,便自动执行Workflow设置的action。点击newrule开始新建一条workflowrul
导读本文主要介绍如何使用Python和OpenCV实现一个实时曲线道路检测系统。(公众号:OpenCV与AI深度学习)畸变矫正 相机镜头扭曲入射光以将其聚焦在相机传感器上。尽管这对于我们捕捉环境图像非常有用,但它们最终往往会稍微不准确地扭曲光线。这可能导致计算机视觉应用中的测量不准确。然而,我们可以很容易地纠正这种失真。 我们可以使用棋盘格来标定相机然后做畸变校正:测试视频中使用的相机用于拍摄棋盘格的20张照片,用于生成畸变模型。我们首先将图像转换为灰度,然后应用cv2.findChessboardCorners()函数。我们已经知道这个棋盘是一个只有直线的二维对象,所以我们可以对检测到的角应用一些变换来正确对齐它们。用cv2.CalibrateCamera()来获取畸变系数和相机矩阵。相机已校准!然后,您可以使用它cv2.undistort()来矫正其余的输入数据。您可以在下面看到棋盘的原始图像和校正后的图像之间的差异:实现代码:defundistort_img(): #Prepareobjectpoints0,0,0...8,5,0 obj_pts=np.zeros((6*9,3
.HTTPError500.19-InternalServerError错误解决方案(0x8007000d) 出现这个错误的原因是.netcore的hostingbundle没有安装.去.netcore官网下载安装后就好。 IIS模块缺少【ASPNETCoreModuleV2】 https://blog.csdn.net/qq_46051312/article/details/122648388 https://www.jianshu.com/p/0c001c166860 此随笔或为自己所写、或为转载于网络。仅用于个人收集及备忘。
PgBouncer是一个轻量级的PostgreSQL数据库连接池,可作为应用服务器与数据库服务器之间的数据库中间件使用。 测试环境 主机名 IP地址 角色 数据名 数据库版本 sht-sgmhadoopcm-01 172.16.101.54 Proxy(安装Pgbouncer) pgbouncer(虚拟的管理数据库) V9.6.4(可以安装,也可以不安装) sht-sgmhadoopdn-01 172.16.101.58 后端数据库服务器 edbstore V9.6.4 sht-sgmhadoopdn-02 172.16.101.59 后端数据库服务器 testdb V9.6.4 软件准备: PostgreSQLv9.6.4 https://ftp.postgresql.org/pub/source/v9.6.4/postgresql-9.6.4.tar.gz PgBouncer1.12 https://www.pgbouncer.org/downloads/files/1.12.0/pgbouncer-1.12.0.tar.gz 一.Postg
一,什么是AUTH模块 Auth模块是Django自带的用户认证模块:django内置了强大的用户认证系统--auth,它默认使用auth_user表来存储用户数据,实现包括用户注册、用户登录、用户认证、注销、修改密码等功能。 二auth模块常用方法 #导入模版:fromdjango.contribimportauth复制 authenticate() 提供了用户认证功能,即验证用户名以及密码是否正确,一般需要username、password两个关键字参数。 如果认证成功(用户名和密码正确有效),便会返回一个User对象。 authenticate()会在该User对象上设置一个属性来标识后端已经认证了该用户,且该信息在后续的登录过程中是需要的。 用法: user=authenticate(username='usernamer',password='password') 复制 login(HttpRequest,user) 该函数接受一个HttpRequest对象,以及一个经过认证的User对象。 该函数实现一个用户登录的功能。它本质上会在后端为该用户生成相关session
5.1使用表单标签,与用户交互 网站怎样与用户进行交互?答案是使用HTML表单(form)。表单是可以把浏览者输入的数据传送到服务器端,这样服务器端程序就可以处理表单传过来的数据。 语法: <form method="传送方式" action="服务器文件"> 讲解: 1.<form>:<form>标签是成对出现的,以<form>开始,以</form>结束。 2.action :浏览者输入的数据被传送到的地方,比如一个PHP页面(save.php)。 3.method : 数据传送的方式(get/post)。 <form method="post" action="save.php"> <labelfor="username">用户名:</label> &n
最近开发一款导航的项目需要行驶方向,这里一般是gps会给我返回航向的,但是公司老系统的数据库没有这个数据,就只能自己计算咯 getAngle(lng_a,lat_a,lng_b,lat_b){ vara=(90-lat_b)*Math.PI/180; varb=(90-lat_a)*Math.PI/180; varAOC_BOC=(lng_b-lng_a)*Math.PI/180; varcosc=Math.cos(a)*Math.cos(b)+Math.sin(a)*Math.sin(b)*Math.cos(AOC_BOC); varsinc=Math.sqrt(1-cosc*cosc); varsinA=Math.sin(a)*Math.sin(AOC_BOC)/sinc; varA=Math.asin(sinA)*180/Math.PI; varres=0; if(lng_b>lng_a&&lat_b>lat_a)res=A; elseif(lng_b>lng_a&&lat_b<la
vlan之间的通信 相同广播域:不同网段不能通信,相同网段可以通信 不同广播域:在相同的广播域也是不可以通信(除非用上次说的hybrid),不同网段更加不能通信 三层交换机 如果在一台三层交换机上配置两个接口,这两个接口上接上了两个pc,然后把三层交换机的路由功能开起来,相当于接上了三层交换机中的逻辑路由器开起来了,那么请问此时两台pc能不能通信? 答:是可以进行通信的,因为此时三层交换机中的路由器有两台pc的直连路由,我们知道,如果两个不同广播域的想要进行通信,路由器中的路由表必须有对应的路由,而此时三层交换机的逻辑路由器上有,这两个pc的直连路由,那么流程就是:pc1发送数据,发现不在同一个网段,那么就会把包给网关,然后,逻辑路由器就会查表,而表中有这一个直连路由,那么就会进行转发。至此就完成了 那么三层交换机可以起多少个vlanIF呢,在逻辑上有多少个vlan就可以起多少个,也就是4094个,既然三层交换机这么好用,那么为什么还需要路由器,因为在三层交换机上没有路由器的
本人热爱中医,通过朋友介绍拜师中医老师,拜师之前需要公正,公正之后需要备案,特此整理教程。方便日后广大中医学习人员办理公正和备案。 公正材料(各地区要求不一样,自行准备,这个是沈阳地区的) 指导老师准备材料 (1) 指导老师身份证,户口本原件和复印件 (2) 指导老师最高学历证书,最高学位证书,毕业证原件和复印件 (3) 指导老师医师资格证,执业医师证,技术职称证原件和复印件 (4) 指导老师单位开具的临床工作15年以上证明 师承人员准备材料 (1) 师承人员身份证,户口本原件和复印件 (2) 师承人员最高学历证书,最高学位证书原件和复印件 (3) 填写完整的《传统医学师承关系合同书》三份 (卫健委官网下载http://wsjk.ln.gov.cn/ 这是辽宁的,其他地区请去其他卫健委下载) (公正的时候老师和学生必须同时到场) 公证部门:沈阳地区是辽宁省公zheng处 办完师承公证后,还要到卫生局
ThecityexecutiveboardinLundwantstoconstructasightseeingtourbybusinLund,sothattouristscanseeeverycornerofthebeautifulcity.Theywanttoconstructthetoursothateverystreetinthecityisvisitedexactlyonce.Thebusshouldalsostartandendatthesamejunction.Asinanycity,thestreetsareeitherone-wayortwo-way,trafficrulesthatmustbeobeyedbythetourbus.Helptheexecutiveboardanddetermineifit'spossibletoconstructasightseeingtourundertheseconstraints. Input Onthefirstlineoftheinputisasinglepositiveintegern,tellingthenumberoft
Filefile=ResourceUtils.getFile("classpath:face/1112.txt"); InputStreaminputStream=newFileInputStream(file); InputStreamReadertreader= newInputStreamReader(inputStream); BufferedReadertBff=newBufferedReader(treader); StringFileReaderstr=tBff.readLine(); tBff.close();复制 ResourceUril读取了文件地址 ,字符流读取到文件数据 ---------------------------------------------------------------------------------------------------------------------------- 上面这种在idea上可以但是放到服务器上会失效 下面这种才是干货: ClassPathResourceclassPathResourc