数学 in OI-数论-1

数论 \(1\)

\(1.\) 质数

定义就不说了吧。

性质 \(\&\) 定理

  • 质数 \(p\) 有且仅有两个质因子 \(1\)\(p\)

  • 质数有无穷个。

  • \([1,\, n]\) 中的质数个数约为 \(\dfrac{n}{\ln n}\) (此结论可用来大致估算某些数论题的数据范围)。

  • 任何一个大于 \(1\) 的整数 \(N\) 都可以分解成 \(N = {\large \prod}\limits_{i = 1}^k \, p_i^{\alpha_i} \ (\forall i ,\, p_i\in \mathbb P ,\, a_i \in \mathbb{N^*})\) 的形式,如果不计各个质因数的顺序,那么这种分解是惟一的

筛质数——线性筛法

线性筛法,顾名思义,可以筛出 \([1,\, n]\) 内的所有质数,时间复杂度为 \(\mathcal O (n)\)

int primes[N], cnt;
// primes存放所有的质数,cnt是质数的数量
int st[N];
// st[i]记录每个数是否是质数

void init(int n){
    for(int i = 2; i <= n; ++i){
        if(!st[i]) primes[cnt++] = i;
        for(int j = 0; primes[j] * i <= n && j < cnt; ++j){
            st[primes[j] * i] = 1;
            if(i % primes[j] == 0) break;
        }
    }
}

\(2.\) 约数

定义还是就不说了吧。~~

性质 \(\&\) 定理

  • 对于任何一个大于 \(1\) 的整数 \(N\),如果将其分解质因数为 \(N = {\large \prod}\limits_{i = 1}^k \, p_i^{\alpha_i} \ (\forall i ,\, p_i\in \mathbb P ,\, a_i \in \mathbb{N^*})\) 的形式,那么 \(N\) 的正约数个数为 \({\large \prod}\limits_{i = 1}^k \, (\alpha_i + 1)\)\(N\) 的所有正约数的和为 \({\large \prod}\limits_{i = 1}^k \left({\large \sum}\limits_{j = 0}^{\alpha_i} \, p_i^j\right)\)
  • \(2^{31}\) 内约数个数最多的数有 \(1600\) 个约数;\(2^{63}\) 内约数个数最多的数有 \(138240\) 个约数。

求约数个数

对于要重复计算多次的,先筛出质数,代码效率会有所提高。

int get_divisors(int x){
	int res = 1, s;
	for(int i = 0; primes[i] < x / primes[i]; ++i){
		int p = primes[i];
		s = 0;
		while(x % p == 0){
			++s;
			x /= p;
		}
		res *= s + 1;
	}
	if(x > 1) res *= 2;
    // 这里一定记得判断是否有还没除尽的质因子
	
	return res;
}

\(3.\) 欧拉函数 \(\varphi\)

定义

\(\varphi(n)\) 表示小于等于 \(n\) 的正整数中与 \(n\) 互质的数的个数。

计算方法

对于任何一个大于 \(1\) 的整数 \(N\),如果将其分解质因数为 \(N = {\large \prod}\limits_{i = 1}^k \, p_i^{\alpha_i} \ (\forall i ,\, p_i\in \mathbb P ,\, a_i \in \mathbb{N^*})\) 的形式,那么:

\[\varphi(N) = N \prod\limits_{i = 1}^k \left( 1 - \cfrac 1{p_i} \right) \]

特别地,\(\varphi(1) = 1\)

性质 \(\&\) 定理

有一堆,慢慢看吧,理性了解,证明的话有兴趣可以自己去搜索。

  • 对于质数 \(p\)\(\varphi(p) = p - 1\)
  • \(p\) 为质数,\(n = p^k \ (k \in \mathbb{N^*})\) ,那么 \(\varphi(n) = p^k - p^{k - 1}\)
  • \(a \mid n\),那么 \(\varphi(an) = a \varphi(n)\)
  • \((n, m) = 1\) ,那么 \(\varphi(n) \varphi(m) = \varphi(nm)\)
  • \(n > 2\) 时,\(\varphi(n)\) 为偶数。
  • \(n\) 为大于 \(1\) 的正整数,那么在小于等于 \(n\) 的正整数中,与 \(n\) 互质的数之和为 \(\dfrac{n \varphi(n)}{2}\)
  • $ n = {\large \sum}\limits_{d \mid n} , \varphi(d)$ 。

\(4.\) 线性筛法求欧拉函数 \(\varphi\)

利用线性筛法以及欧拉函数的性质,可以筛出 \([1,\, n]\) 内的所有质数,顺便求出 \([1,\, n]\) 内的所有整数的欧拉函数,时间复杂度为 \(\mathcal O (n)\)

int primes[N], cnt;
int phi[N];
bool st[N];

void init(int n){
    phi[1] = 1;
    for(int i = 2; i <= n; ++i){
        if(!st[i]){
            primes[cnt++] = i;
            phi[i] = i - 1;
            // 前面的性质1
        }
        for(int j = 0; primes[j] * i <= n && j < cnt; ++j){
            st[primes[j] * i] = 1;
            if(i % primes[j] == 0){
                phi[i * primes[j]] = phi[i] * primes[j];
                // 性质3
                break;
            }
            phi[i * primes[j]] = phi[i] * (primes[j] - 1);
            // 这个可以直接由计算方法推出来
        }
    }
}

\(5.\) 欧拉定理

\(\text{Content}\)

\(a, n \in \mathbb{N^*}\) ,且 \((a, n) = 1\) ,则有:

\[\large a^{\varphi(n)} \equiv 1 \pmod n \]

特别地,当 \(n \in \mathbb P\) 时,这就成了费马小定理

\(p \in \mathbb P\) ,且 \(p \nmid a\) 则有:

\[\large a^{p - 1} \equiv 1 \pmod p \]

\(6.\) 综合应用

\(\texttt{E}\color{red}{\texttt{g} 1}\)

给定整数 \(N\),将 \(N!\) 分解质因数,按照算术基本定理的形式输出分解结果中的 \(p_i\)\(c_i\)

按照 \(p_i\) 由小到大的顺序输出。

  • \(3 \le N \le 10^6\)

首先 \(N \le 10^6\) ,所以 \(N!\) 会很大,直接分解肯定不行,考虑从 \(N!\) 的特殊性质入手。

\(N! = 1 \times 2 \times \cdots \times N\)

那么对于一个质数 \(p\)\(1 \sim N\) 中的 \(p,2p,\dots,kp\)\(p\) 的倍数)肯定含有质因子 \(p\) ,可以很容易得出个数为 \(\left\lfloor \dfrac Np \right\rfloor\)

但这还会漏掉一些,如果一个数中含有 \(2\) 个因子 \(p\) ,会被漏算一次,因此还需要加上 \(1 \sim N\) 中的 \(p^2,2p^2,\dots,kp^2\) ,有 \(\left\lfloor \dfrac N{p^2} \right\rfloor\) 个。

以此类推,\(N!\) 中某个质因子 \(p\) 的次数为

\[\sum\limits_{k = 1}^{\left\lfloor \log_p n \right\rfloor} \left\lfloor \dfrac N{p^k} \right\rfloor \]

那么接下来枚举所有小于等于 \(N\) 的质数,再分别求和就好了,时间复杂度 \(\mathcal O(N)\) 左右吧(有点不好分析,反正过肯定是没问题的)

\(\mathcal{Code}\)

#include <cstdio>

using namespace std;
typedef long long ll;

const int N = 1e6 + 10;

int n;
int primes[N], cnt;
bool st[N];

void init(int n){
	for(int i = 2; i <= n; ++i){
		if(!st[i]) primes[cnt++] = i;
		for(int j = 0; primes[j] * i <= n && j < cnt; ++j){
			st[primes[j] * i] = 1;
			if(i % primes[j] == 0) break;
		}
	}
}

int main(){
	scanf("%d", &n);
	init(n);
	
	for(int i = 0; i < cnt; ++i){
		int p = primes[i], s = 0;
		int k = n;
		while(k){
			s += k / p;
			k /= p;
		}
		printf("%d %d\n", p, s);
	}
	
	return 0;
}

\(\texttt{E}\color{red}{\texttt{g} 2}\) 洛谷P2158 [SDOI2008] 仪仗队

作为体育委员,C 君负责这次运动会仪仗队的训练。仪仗队是由学生组成的 \(n \times n\) 的方阵,为了保证队伍在行进中整齐划一,C 君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如下图)。

现在,C 君希望你告诉他队伍整齐时能看到的学生人数。

  • 对于 \(100 \%\) 的数据,\(1 \le n \le 40000\)

首先进行分析,将仪仗队放在一个平面直角坐标系中,无法看到的学生是因为被在同一条从原点出发的直线上的前面的学生挡住了。

那么可以得到学生能被看到的条件是横纵坐标互质

答案就是:

\[\sum_{i = 1}^{n - 1} \sum_{j = 1}^{n - 1} [\gcd(i,j) = 1] + 2 \]

最后加上的两个是 \((0,1)\)\((1,0)\)

上式变一下(配合着图可能更好理解一些):

\[2 \sum_{i = 1}^{n - 1} \sum_{j = 1}^{i} [\gcd(i, j) = 1] + 1 \]

这里我们惊喜的发现,可以用 \(\varphi(i)\) 来表示 \({\Large \sum}\limits_{j = 1}^{i} \, [\gcd(i, j) = 1]\)

于是,最后的柿子就出来咯:

\[{\rm Ans} = 2 \sum_{i = 1}^{n - 1} \varphi(i) + 1 \]

当然,当 \(n = 1\) 时,是没有学生的,也不满足上面的结论,需要特判一下。

代码就很好实现啦,用线性筛求个欧拉函数就可以 \(\color{#52C41A}{\text{AC}}\) 此题,\(\mathcal O(n)\) 根本不虚。

\(\mathcal{Code}\)

#include <iostream>
#include <cstring>
#include <cstdio>

using namespace std;
typedef long long ll;

const int N = 40010;

int T, n, res = 1;	// +1跑到这里来了哦
int primes[N], cnt;
int phi[N];
bool st[N];

void init(int n){
	phi[1] = 1;
	for(int i = 2; i <= n; ++i){
		if(!st[i]){
			primes[cnt++] = i;
			phi[i] = i - 1;
		}
		for(int j = 0; primes[j] * i <= n && j < cnt; ++j){
			st[primes[j] * i] = 1;
			if(i % primes[j] == 0){
				phi[i * primes[j]] = phi[i] * primes[j];
				break;
			}
			phi[i * primes[j]] = phi[i] * (primes[j] - 1);
		}                          
	}
}

int main(){
	scanf("%d", &n);
	if(n == 1){
		puts("0");
		return 0;
	}
	init(n);
	
	for(int i = 1; i < n; ++i) res += 2 * phi[i];
	
	printf("%d\n", res);
	return 0;
}

蒟蒻很弱,如有错漏还请各位大佬指出

感谢~~~

本文转载于网络 如有侵权请联系删除

相关文章

  • C++函数指针详解

    大家好,又见面了,我是你们的朋友全栈君。1定义每一个函数都占用一段内存单元,它们有一个起始地址,指向函数入口地址的指针称为函数指针。2语法指向函数的指针变量的一般定义形式为:数据类型(*指针变量名)(参数表);3说明函数指针的定义形式中的数据类型是指函数的返回值的类型。区分下面两个语句:int(*p)(inta,intb);//p是一个指向函数的指针变量,所指函数的返回值类型为整型 int*p(inta,intb);//p是函数名,此函数的返回值类型为整型指针指向函数的指针变量不是固定指向哪一个函数的,而只是表示定义了一个这样类型的变量,它是专门用来存放函数的入口地址的;在程序中把哪一个函数的地址赋给它,它就指向哪一个函数。在给函数指针变量赋值时,只需给出函数名,而不必给出参数。如函数max的原型为:intmax(intx,inty);指针p的定义为:int(*p)(inta,intb);则p=max;的作用是将函数max的入口地址赋给指针变量p。这时,p就是指向函数max的指针变量,也就是p和max都指向函数的开头。在一个程序中,指针变量p可以先后指向不同的函数,但一个函数不能赋给一

  • 我能遇到一个好老师,是何其幸运的事情。

    你好呀,我歪歪。今天是教师节,是老师们的节日。老师在一个人的成长过程中起着至关重要的作用,甚至会影响到一个人的一生。我在小学二年级的时候遇到一个老师。一年级的时候,我特别的调皮,上课捣蛋、下课打架、经常逃课去游戏厅打电玩。所以二年级开学老师就不收我了。开学之后,不让我报道,站在教室门口,堵着我和家里人,不论家里人怎么去给老师说好话,他都非常坚定的不要我。对家里人说:我不能收他的,教育不下来,他以后也不会有什么出息的。我在旁边都听到了,后来我就转学去到了乡村小学。以后的多年,一直到现在,当我回到家乡,走过当年的小学门口的时候,我都会想起这件事。倒不是说他不是好老师,反正那时我也不是好学生。这么多年过去了,我早就不记得那个老师叫什么,长什么样子了,但是那一年在教室门口,一个老师大声呵斥着我的家长,说什么也不让我入学,这件事算是我的一个童年阴影,一个老师带来的阴影。我初中的时候遇到一个体育老师。还是在乡下,那时候学校里面根本就没有校队这个概念。有一次上体育课他对我们说:我准备组建一个校队,长跑的,我发现你们这帮学生,每天翻山越岭的来上学,还挺能跑的。这样,有兴趣的同学,从明天开始,每天早上在

  • 日本人制作汉字俄罗斯方块游戏,看哭一票中国人

    俄罗斯方块对于各位玩家来说一定是童年难忘的记忆,一位日本大学生ARAMA在社交媒体发布了一段演示视频“汉字版俄罗斯方块”,在这个视频中,经典俄罗斯方块中的图形全部都替换成了汉字,游戏难度更加变态...... 传统的俄罗斯方块的规则是满一格就消除,这个视频里的消除方式则要组成一个汉字,比如,“一”+“土”组成“王”。同样,三个汉字也可以左右上下组成汉字,如:臣+又+貝=賢(繁体汉字,相当于简体字贤)。如:水+古+月=湖但,三格组合并不是终点哦,还可以四格,甚至五格六格,只要你想得到。这款游戏最好玩的地方就是一旦拼成“终”这个汉字,不管怎么样,游戏都会结束。这种玩法不仅考验你的反应能力,对你的汉字储备也是一个很大的考验,如果你认识的字不够多,估计用不了几轮就会到顶。就像上图的这个“辔”字就难住了小弟。丢人啊丢人,求求你们把小弟的语文老师按住,我怕他揍我!这个视频公布以后,不仅小弟被难住了,很多网友也炸锅了:“太烧脑了”“我可能是个假的中国人”“后悔没好好学习”。虽然有网友说一个日本人做这个视频很打脸,但是小编觉得这是对中国文化一个很好的传输。而且,幸好不是韩国人做的,不然有可能汉字就不属于

  • 【荣誉】亿欧重磅发布《数字服务商榜单100》,腾讯企点荣登榜单!

    6月25日,由亿欧EqualOcean主办、北拓资本联合主办的“全球产业数字化高峰论坛”在北京康莱德酒店召开。本次大会以“数字经济-产业升级”为主题,汇集了数十位在产业数字化方面大胆开拓的实干家们,结合我国企业产业数字化转型落地情况,揭示数字经济的内涵、特征与转型路径,为促进中国产业数字化发展提供智力支撑。作为数字经济现阶段成果的里程碑式记录,本次论坛重磅发布《数字服务商榜单100》,并编撰《2021数字化转型服务商精选目录》,腾讯云|腾讯企点荣登榜单。中国数字化转型服务商TOP100腾讯云|腾讯企点缘何上榜?亿欧EqualOcean在本次论坛上发布的《数字服务商榜单100》,既是对数字化转型背后的驱动力的独特分析,又是对行业内在技术和商业化方面具有较高市场认可度的企业汇总。亿欧智库撰写的《2021数字化转型服务商精选目录》,从政策、经济、环境、技术四个维度分析企业数字化转型的必要性,提出数字化转型方法论,研究数字化营销、数字化管理、数字化供应链、数字化生产及数字化技术五大服务领域的市场动态、竞争格局、企业图谱、挑战及机遇,以期给企业变革迎来启示和参考,推动整体数字化转型进程。本次荣登

  • 「SAP技术」SAP MM 采购信息记录新价格不能体现在采购订单新的ITEM上?

    「SAP技术」SAPMM采购信息记录新价格不能体现在采购订单新的ITEM上?下午,一个同行朋友问我一个问题,说她修改了某个物料的采购价格,然后去一个老的采购订单上增加一个新的item,deliverydate是在新的价格有效期范围内,却发现系统还是取老的已经失效的采购价格。这是为啥?笔者第一时间想到了采购信息记录里的pricedatecategory字段。经过测试与验证,我再现了她遇到的问题,如下的采购信息记录,维护了2个有效期,价格不同:2020-1-1到2020-06-11价格是:55.51CNY/EA;2020-6-12到9999-12-31价格是:56CNY/EA;找到了一个老的PO,PO的documentdate是2020-03-18.如上图。1)PIR里的pricedatecategory为空:ME22N去该PO里增加一个新的ITEM,虽然deliverydate在2020-6-12以后,但是价格还是取的老价格55.51,如上图。2)将PIR里的pricedatecategory字段值设置为1(purchaseorderdate),ME22N去为该PO增加新的item,价格

  • PHP实现二维数组按照指定的字段进行排序算法示例

    本文实例讲述了PHP实现二维数组按照指定的字段进行排序算法。分享给大家供大家参考,具体如下:遇到问题:把两个数组用php自带的array_merge()函数合并之后,想按照两个数组中共有的’post_time’字段为新数组进行排序解决办法:通过查阅官方手册,得知有array_multisort()这个函数,可以对多个数组或多维数组进行排序,返回排序之后的数组,其中字符串键名将被保留,但是数字键名将被重新索引,从0开始,并以1递增。下面封装了这个函数,便于调用:/** *二维数组按照指定字段进行排序 *@paramsarray$array需要排序的数组 *@paramsstring$field排序的字段 *@paramsstring$sort排序顺序标志SORT_DESC降序;SORT_ASC升序 */ functionarraySequence($array,$field,$sort='SORT_DESC'){ $arrSort=array(); foreach($arrayas$uniqid=$row){ foreach($rowas$key=$value){ $

  • Vue生命周期

    Vue在GitHub上面的star数量已经超过了react,虽然npm包下载的数量还没有react多,但是Vue上升的势头真的很猛。Vue生命周期2.0和1.0差别还是有一点的,生命周期的博客文章百度也是很多,今天我简单提一下生命周期,然后说一下一些可能比较没人注意的点。先上Vue官网的生命周期图片:先罗列出生命周期然后一个一个讲解beforeCreatecreatedbeforeMountmountedbeforeUpdateupdatedbeforeDestroydestroyedbeforeCreate实例组件刚创建,元素DOM和数据都还没有初始化,暂时不知道能在这个周期里面进行生命操作。created数据data已经初始化完成,方法也已经可以调用,但是DOM为渲染。在这个周期里面如果进行请求是可以改变数据并渲染,由于DOM未挂载,请求过多或者占用时间过长会导致页面线上空白。beforeMountDOM挂载完成,数据也初始化完成,但是数据的双向绑定还是显示{{}},这是因为Vue采用了VirtualDOM(虚拟Dom)技术。先占住了一个坑。mounted数据和DOM都完成挂载,在

  • Apache Solr JMX服务 RCE 漏洞复现

    本文作者:小阳(TimelineSec核心成员)本文共724字,阅读大约需要2~3分钟声明:请勿做非法用途,否则后果自负0x00漏洞概述 ApacheSolr的8.1.1和8.2.0版本的自带配置文件solr.in.sh中存在不安全的选项ENABLE_REMOTE_JMX_OPTS="true"。如果受害者使用了该默认配置,则会在默认端口18983开放JMX服务,且默认未开启认证。任何可访问此端口的攻击者可利用此漏洞向受影响服务发起攻击,执行任意代码。0x01影响版本 ApacheSolr8.1.1和8.2.0版本0x02漏洞危害 如果受害者使用了该默认配置,则会在默认端口18983开放JMX服务,且默认未开启认证。任何可访问此端口的攻击者可利用此漏洞向受影响服务发起攻击,执行任意代码。0x03复现搭建 Solr8.20、Java环境、kali系统 因为Solr8.20需要java环境支持,而kali系统本身内置openjdk版本(我的是java10),所以我们无需另外下载java环境。安装ApacheSolr8.20:wgethttps://mirrors.tun

  • 线程源码分析之cancel.c(基于linuxthreads2.0.1)

    cancel.c实现了线程的是否可取消,取消类型,取消线程,设置线程退出时需要执行的函数列表等功能。/*Threadcancellation*/ #include<errno.h> #include"pthread.h" #include"internals.h" #include"restart.h" /* 修改线程的可取消属性。有一个取消点 取消状态分为可取消,不可取消 不可取消的时候,收到取消信号,忽略 可取消的时候,收到取消信号的时候,根据取消类型做处理。 立即处理 不立刻处理,到下一个取消点,判定线程的状态的取消类型再处理 */ intpthread_setcancelstate(intstate,int*oldstate) { pthread_tself=thread_self(); if(state<PTHREAD_CANCEL_ENABLE||state>PTHREAD_CANCEL_DISABLE) returnEINVAL; //保存旧的状态 if(oldstate!=NULL)

  • SAP官方发布的ABAP编程规范

    版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文(CreativeCommons)最近有朋友在公众号后台给我留言,“Jerry啊,你最近写的都是一些SAP研究院里面用到的新技术,能不能写点SAP传统的开发技术比如ABAP相关的东西”?其实Jerry在刚开始写这个公众号的时候,是写过很多ABAP的技术文章:Jerry的ABAP,Java和JavaScript乱炖 ABAP开发人员未来应该学些什么 Jerry2017年的五一小长假:8种经典排序算法的ABAP实现 Jerry的ABAP原创技术文章合集 300行ABAP代码实现一个最简单的区块链原型 使用Java+SAP云平台+SAPCloudConnector调用ABAPOn-Premise系统里的函数 在SAP云平台的CloudFoundry环境下消费ABAPOn-PremiseOData服务 ABAPvsJava,蛙泳vs自由泳 聊聊C语言和ABAP 动手使用ABAPChannel开发一些小工具,提升日常工作效率 我用ABAP做过的那些无聊的事情 不喜欢SAPGUI?那试试用Eclipse进行AB

  • Linux下find、awk、sed、grep命令的例子

    find:搜索工具#列出当前目录及子目录下所有文件和文件夹 find. #在/home目录下查找以.txt结尾的文件名,-i表示忽略大小写 find/home-iname"*.txt"复制find命令的详细介绍awk:数据快速处理#test.txt 2thisisatest 3Areyoulikeawk This'satest 10Thereareorange,apple,mongo复制#指定,为分隔符,在test中查找,并且输出分隔之后的每行的第一、第四个元素。分隔符默认为空格(包括tab) awk-F,'{print$1,$2}'test.txt 2thisisatest 3Areyoulikeawk This'satest 10Thereareorangeapple #格式化输出,第一个元素和第四个元素的占位 awk'{printf"%-8s%-10s\n",$1,$4}'log.txt 2a 3like This's 10orange,apple,mongo #

  • 15个增加效率的常用Win系统快捷键

    15个一定要会的常用Win系统快捷键,快捷键带给我们的不只是快速,还能感受到机器带来的快感。Ctrl+Shift+N——创建一个新的文件夹你需要在文件夹窗口中按Ctrl+Shift+N才行,在Chrome中是打开隐身窗口的快捷键。Ctrl+Shift+鼠标左键——用管理员权限打开程序有些程序,需要右键选择 Windows7的管理员权限才可以正常运行,而这个蛋疼的快捷键我没有测试成功。@sfufoet在受限制帐户下测试的软件AirVideoServer可以在Touch上成功连接AirVideoServer并播放视频。Shift+鼠标右键——增强版右键发送到右键发送到是一个很常用的功能,一般情况下可以发送到:桌面快捷方式、邮件联系人、压缩文档、移动设备等等。而通过Shift+鼠标右键的发送到,增加了Windows7个人文件夹内的所有内容,包括:我的文档、我的照片、我的音乐、桌面等等Shift+右键——在当前文件夹用命令行打开。开始>运行>cmd就是命令行界面,传说中的DOS命令。最常用的可能就是ping了吧?用命令行来修改文件扩展名也是好办法,renname.txtname.b

  • 金融科技&大数据产品推荐:BeyondContainer——基于Docker的企业级应用智能化管理系统

    BeyondContainer是BoCloud博云基于Docker技术的容器云解决方案,利用微服务思想和DevOps理念,满足对应用的构建、测试、部署、更新、运维全流程体系官网|www.datayuan.cn微信公众号ID|datayuancn本产品为数据猿推出的“金融科技价值—数据驱动金融商业裂变”大型主题策划活动第一部分的文章/案例/产品征集部分;感谢BoCloud博云的产品投递1、产品名称BeyondContainer容器云平台解决方案2、所属分类金融科技•云计算平台(容器云)3、产品介绍BeyondContainer是BoCloud博云基于Docker技术的容器云解决方案,利用微服务思想和DevOps理念,满足对应用的构建、测试、部署、更新、运维全流程体系。通过微服务化应用架构与关键技术,实现对典型应用场景的微服务化模型与编排技术,主要为企业客户实现业务应用Docker基础平台、DevOps、微服务PaaS中间件、应用自动化运维管理等功能。平台已经在金融、能源等行业得到了广泛应用,帮助企业实现基于容器的应用持续集成和快速部署、秒级弹性伸缩、业务可用性保障等关键特性,帮助企业搭建

  • PDF.NET数据开发框架实体类操作实例(for PostgreSQL,并且解决自增问题) PDF.NET数据开发框架实体类操作实例(MySQL)

    本篇是PDF.NET数据开发框架实体类操作实例(MySQL)的姊妹篇,两者使用了同一个测试程序,不同的只是使用的类库和数据库不同,下面说说具体的使用过程。1,首先在App.config文件中配置数据库连接字符串:<?xmlversion="1.0"encoding="utf-8"?> <configuration> <connectionStrings> <!--<addname="default"connectionString="server=192.168.50.XX;UserId=root;password=XXXX;database=test"providerName="PWMIS.DataProvider.Data.MySQL,PWMIS.MySqlClient"/>--> <addname="default"connectionString="server=127.0.0.1;U

  • es6笔记(3) 变量的解构赋值

    基本概念 本质上是一种匹配模式,只要等号两边的模式相同,那么左边的变量就可以被赋予对应的值。 //以往定义接个变量的时候,需要这样 vara=1, b=2, c=3; //使用ES6解构赋值,可以这样写 let[a,b,c]=[1,2,3]; 复制 解构赋值的几种方式 1.数组的解构赋值 let[foo,[[bar],baz]]=[1,[[2],3]]; console.log(foo,bar,baz);//输出1,2,3 复制 解构赋值是可以使用缺省的方式用于占位 let[,,c]=[1,2,3]; console.log(c);//3 复制 如果解构赋值时,没有找到对应的值会怎样? let[a]=[]; console.log(a);//解构失败undefined; let[y=1]=[]; console.log(y);//因为第二个等号,解构失败。输出1 复制 2.对象的解构赋值 我们知道,对象和数组不太一样,1对象是有属性的,2对象是无序的。那么变量的解构赋值如何进行呢? //=======变量名,与属性名一致========== //此时会按照变量名, //与右侧的属性名

  • 毛毛虫题解

    毛毛虫题解 此题倒是简单。 一个毛毛虫可以看做一层层的儿子节点相加(加上自己与父亲)。 我们枚举每个点作为连接两条链的交点,更新\(ans\), 直接上代码吧: #include<bits/stdc++.h> usingnamespacestd; constintN=3e5+7; intn,m,t1,t2,cnt=0,ans=0,f[N],head[N]; structedge{intnxt,to;}e[N<<1]; map<int,int>ha[N]; inlinevoidadd(intu,intv){e[++cnt].nxt=head[u],e[cnt].to=v,head[u]=cnt;} inlineintread(){ intT=0,F=1;charch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')F=-1;ch=getchar();} while(ch>='0'&&ch<='9')T=(T<<3)+(T<<1)+(ch-48),ch

  • JS中Date.parse方法返回NaN解决方案

    Date.parse()方法:复制 //将时间字符串转换为秒数 vardate_str='2013-12-318:32:00'; alert(date_str.replace(/-/g,'/'));//2013/12/318:32:00 vardate_number=Date.parse(date_str.replace(/-/g,'/'))/1000;//1386066720 alert(date_number); //parse:解析一个包含日期的字符串,并返回该日期与1970年1月1日午夜之间所间隔的毫秒数 //parse方法是Date对象的一个静态方法复制   Date时间比较:复制 varstartDate=newDate(Date.parse(checkBeginTimeStr.replace(/-/g,"/"))).getTime()/1000; varendDate=newDate(Date.parse(checkEndTimeStr.replace(/-/g,"/"))).getTime()/1000; if(startDate>endDa

  • vue3+vite应用中添加sass预处理器

    转载:https://blog.csdn.net/sinat_41211717/article/details/120365001 一、如何安装 进入项目目录直接npm安装即可,不用繁琐的各种配置 npminstall--save-devsass复制 如果安装了,但是运行vite启动项目依旧出现报错,请检查package.json文件中,sass是不是在依赖配置中,把他移动到开发依赖中即可,一般为安装sass的时候npm没有加--save-dev所导致的。      二、加入全局scss文件 打开vite的配置文件,在里面加入css的配置即可 cssPreprocessOptions:{ scss:{ additionalData:'@import"./src//scss/common.scss";'//全局公共样式 } }复制 三、关于sass的“.....Using/fordivision.....”报错   这是由于sass版本导致的问题,不影响项目编译,解决方法: 1.将 “/”的位置改为 match.de

  • HUAWEI CT6100 进 BIOS

    设备 由于家中将IPv6分配给了每个设备,我对于这些设备的安全性其实还是存在顾虑,所以考虑加装个防火墙。因为不是经常刷机刷BOIS,图方便在淘宝买了个刷好现成的HUAWEICT6100。 HUAWEICT6100同时拥有两个千兆网口,CPU是J1800,对于500M的移动宽带就跑个防火墙还是绰绰有余的。260块钱的价格带2GDDR3笔记本内存、8G固态(虽然值不了几个钱),但至少比动辄350块钱往上走的J1900裸机要合适的多。 刷BIOS 华为的瘦客户机一般来说,电子硬盘都是加密没法用的,BOIS也得重新刷。这种机器的BIOS不太好找,可以上某宝看看。这里我在网上找了个视频,可以参考:第八集[达特分享]华为CT5000一键刷BIOS安装OpenWRT制作软路由哔哩哔哩bilibili。 由于HUAWEICT6100其实算是相当老的电子产品了(我找到的最早的是华为企业互动社区中2015年8月的帖子),所以在进入系统之前经可能拔除自带驱动的设备。比如我开机时就一直重启,经过一番排查,发现是系统无法识别无线鼠标的蓝牙接收器,自检不通过。 我购买的HUAWEICT6100是商家刷过,经过测试

  • 最强 Java Redis 客户端

    Redisson分布式缓存 Map SpringCache JCache 最新Java面试题 为什么要在Java分布式应用程序中使用缓存? 在提高应用程序速度和性能上,每一毫秒都很重要。根据谷歌的一项研究,假如一个网站在3秒钟或更短时间内没有加载成功,会有53%的手机用户会离开。 缓存是让分布式应用程序加速的重要技术之一。存储的信息越接近CPU,访问速度就越快。从CPU缓存中加载数据比从RAM中加载要快得多,比从硬盘或网络上加载要快得多得多。 要存储经常访问的数据,分布式应用程序需要在多台机器中维护缓存。分布式缓存是降低分布式应用程序延迟、提高并发性和可伸缩性的一种重要策略。 Redis是一种流行的开源内存数据存储,可用作数据库、缓存或消息代理。由于是从内存而非磁盘加载数据,Redis比许多传统的数据库解决方案更快。 然而,对开发者来说让Redis分布式缓存正确工作是一个巨大挑战。例如,必须谨慎处理本地缓存失效,即替换或删除缓存条目。每次更新或删除存储计算机本地缓存中的信息时,必须更新分布式缓存系统所有计算机内存中的缓存。 好消息是,有一些类似Redisson这样的Redis框架

  • Linux安装workon虚拟环境(Python虚拟运行环境)

    参考 https://blog.csdn.net/file_data/article/details/105408938 一、查询python解释器所在路径 以下查询py3和py2的目录: $whichpython3 /usr/bin/python3复制 $whichpython2 /usr/bin/python2复制 二、安装python虚拟运行环境 pip安装(有sudo权限) $sudopip3installvirtualenvwrapper复制 $sudopip3installvirtualenvwrapper复制 pip安装(没有sudo权限) $pip3installvirtualenvwrapper $pip3installvirtualenvwrapper复制 上述工具装好后,需要执行以下环境变量设置。 1.创建目录用来存放虚拟环境 mkdir$HOME/.virtualenvs复制 2.在~/.bashrc中,最后添加这么几行:(有sudo权限) exportWORKON_HOME=$HOME/.virtualenvs VIRTUAL

相关推荐

推荐阅读