算法学习笔记(11): 原根

原根

此文相对困难,请读者酌情食用

在定义原根之前,我们先定义其他的一点东西


通俗一点来说,对于 \(a\) 在模 \(p\) 意义下的就是 \(a^x \equiv 1 \pmod p\)最小正整数解 \(x\)

或者说,\(a\) 在模 \(p\) 意义下生成子群的阶(群的大小)

再或者说,是 \(a\) 在模 \(p\) 意义下的循环节的大小

循环节,生成子群……真绕……其实两者很类似

两者的大小也就是在模 \(p\) 意义下集合 \(\{a^1, a^2, a^3,\dots,a^k\}\) 不重复元素的个数

可以通过欧拉定理可知 \(a^{\varphi(p)} \equiv a^0 \equiv 1 \pmod p\) 也就是说存在一个数 \(k\),使得 \(a^k \equiv a \pmod p\)

所以,就有了循环……

我们将 \(a\) 在模 \(m\) 意义下的记作 \(ord_ma\)

显然,无论是根据群论还是什么,\(ord_ma\) 一定是 \(\varphi(p)\) 的因数

特别的,当 \(ord_ma = \varphi(p)\) 时,称 \(a\) 为模 \(p\) 意义下的一个原根

那么原根的定义出来了……


原根

上述定义或许不是那么简单,我们换一种说法

\[\begin{aligned} \forall x \in [1, \varphi(p)), a^x \not\equiv 1 \pmod p \\ a^{\varphi(p)} \equiv 1 \pmod p \end{aligned} \]

满足上述两个条件的数 \(a\) 就是模 \(p\) 意义下的一个原根

这两个条件也是我们在程序中验证原根的方法 QwQ

而对于原根来说,\(a^1, a^2,\dots,a^{\varphi(p)}\)\(m\) 下各不相同,他们就是最短的循环节,也是模 \(p\) 意义下的完全剩余系,或者说原根的生成子群


但是,并不是每一个数都存在原根

例如 \(\varphi(8) = 4\),但是没有任何数在模 \(8\) 下的阶为 \(4\)

为判断一个数是否有原根,我们有一个重要的定理:

正整数 \(k\) 有原根的充要条件为 \(k\) 能表示成 \(2, 4, p^n, 2p^n\) 中的任何形式之一,其中 \(p\)为奇素数

由于证明比较复杂,若感兴趣可以参见这篇博客 原根证明


那么如何求出一个数 \(p\) 有多少个原根

假设我们已经求出了一个原根 \(g\)

由于原根一定存在与 \(p\) 的完全剩余系中,而 \(g\) 的生成子群与之等价,也就是说,我们需要在

\[\{g^k|k \in [1, \varphi(p))\} \]

这个集合中寻找所有的原根

所以,考虑构造出判断阶的方法。我们令 \(d = gcd(k, \varphi(p))\)

那么

\[g^{k\frac {\varphi(p)} d} \equiv g^{\varphi(p) \frac kd} \equiv 1^{\frac kd} \equiv 1 \pmod p \]

那么 \(\frac k{gcd(k, \varphi(p))}\) 也就是 \(g^k\) 的阶

若需要满足原根的定义,我们必须使得 \(gcd(k, \varphi(p)) = 1\)

同时考虑 \(g = g^1\)\(gcd(1, \varphi(p)) = 1\),也就是说有总共有 \(\varphi(\varphi(p))\) 个原根


这同时启发我们,只要我们找到了任意一个模 \(p\) 意义下的原根,我们就可以求出所有原根。

至于如何找到原根,选择暴力枚举即可

有证明:如果一个数 \(n\) 有原根,则其最小原根渐近意义下不大于 \(\sqrt[4]n\) 级别,所以直接枚举是没有任何问题的


那么我们总结一下求 \(n\) 的原根的所有步骤

  • 预处理

    • 利用线性筛求出所有的质数以及每一个数的 \(\varphi\)

    • 对每一个筛出的质数,标记出所有 \(p^q\)\(2p^q\) (别忘了\(2, 4\))

  • 判断 \(n\) 是否有原根

  • 最小原根

    • 求出 \(\varphi(m)\) 的所有质因数 \(i\),记录 \(m/i\) (记得将 \(1\) 也记录进去)

    • 枚举一个数 \(g\),对于每一个记录的数 \(j = m/i\) 分别计算 \(g^j\),如果\(i^j \equiv 1 \pmod m\) ,说明 \(i\) 不是原根 (这里再下文中有解释)

    • 重复第二部,直到找到一个原根 \(g\) 为止

  • 所有原根

    • 枚举 \(k \in [1, \varphi(m))\)

    • 如果 \(gcd(k, \varphi(m)) = 1\),则 \(g^k\) 一个原根,记录下他

解释:求最小原根的判断

为什么我们只需要枚举 \(m/i\) 就行了?

考虑我们将 \(m\) 分解成 \(m = i_1^{a_1} i_2^{a_2}\dots i_k^{a_k}\)

由于如果需要满足 \(i^j \equiv 1 \pmod p\),一定有 \(j|\varphi(p)\)

那么对于 \(m/i = kj\),一定有 \(i^{m/i}\equiv 1 \mod p\)

也就是说,所有 \(m/i\) 就包含了所有情况了

那么为什么要加上 \(1\) 呢,这就交给读者消化思考喽 _

参考代码如下:真的只供参考,这种写法特别慢

template<typename T>
inline T gcd(T x, T y) {
	T z;
	while (y) z = x % y, x = y, y = z;
	return x;
}

template<typename T>
inline T qpow(T a, T x, T p) {
	T r(1); a %= p;
	while (x) {
		if (x & 1) r = (r * a) % p;
		a = (a * a) % p, x >>= 1;
	}
	return r;
}

int phi[N], notp[N];
std::vector<int> prm;
void getPrm() {
	phi[1] = 1;
	for (int i = 2; i < N; ++i) {
		if (!notp[i]) prm.push_back(i), phi[i] = i - 1;
		
		for (const int &j : prm) {
			if (i * j >= N) break;
			notp[i * j] = true;
			if (i % j == 0) {
				// i | n && i^2 | n => phi(n) = phi(n / i) * i
				phi[i * j] = phi[i] * j; break;
			} else {
				// i | n && not i^2 | n => phi(n) = phi(n / i) * (i - 1)
				phi[i * j] = phi[i] * phi[j];
			}
		}
	} // end getPrm for
}

bool exists[N];
void getExists() {
	exists[2] = exists[4] = true;
	for (int i = 1; i < (int)prm.size(); ++i) {
		int p = prm[i];
		for (int q = p; q < N; q *= p) {
			exists[q] = true;
			if (q * 2 < N) exists[q * 2] = true;
		}
	}
	// printf("Exists init!\n");
}

void factorize(int x, vector<int> & v) {
	v.push_back(1);
	for (const int &p : prm) {
		if (p >= x) break;
		if (x % p == 0) v.push_back(x / p);
	}
}

void getAll(int p, vector<int> & v) {
	// no answer
	if (!exists[p]) return;
	
	int ph = phi[p];
	int fst, cur;
	vector<int> factors; factors.clear();
	factorize(ph, factors);
	
	// enum i which gcd(i, m) == 1
	// find first element i suit i^ph = 1 mod p
	for (int i = 1; ; ++i) {
		if (gcd(i, p) != 1) continue;
		// if (qpow(i, ph, p) != 1) continue;
		
		bool valid = true;
		// we need i only if i^ph = 1 mod p, not other numbers.
		for (auto &e : factors) {
			if (e != ph && qpow(i, e, p) == 1) {
				valid = false; break;
			}
		}
		
		if (valid) {
			fst = cur = i; break;
		}
	}
	
	for (int i(1); i <= ph; ++i) {
		if (gcd(i, ph) == 1) v.push_back(cur);
		cur = cur * fst % p;
	}
}

考虑模板可能有爆 int 的风险,请参考者合理使用 long long

这样通过 getAll 得出的 vector 是乱序的,需要再排序一次

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

相关文章

  • 2019最新Web前端经典面试试题及答案-史上最全前端面试题(含答案)

    大家好,又见面了,我是你们的朋友全栈君。近期总结一一些面试题都是企业的面试题笔记题感觉薪资10k下的都会出笔试题特别高的薪资都是直接技术面试或者是现场编程总结很多人的面试题,后期会对于单个知识点再说笔记详细讲解。最新Vue学习视频:B站小胖梅-的个人空间_哔哩哔哩_Bilibilihttps://space.bilibili.com/482859959红色为常见面试题=============================================================前端面试题:1.一个200*200的div在不同分辨率屏幕上下左右居中,用css实现<divstyle="width:500px;height:500px;border:1pxsolidgreen;display:flex;justify-content:center;align-items:center;"> <divstyle=""> 上下左右居中 </div> </div>复制2.写一个左中右布局占满屏幕,其中

  • 具有观察约束的检索和定位(cs.CV)

    准确的视觉重定位对许多人工智能应用非常关键,如增强现实、虚拟现实、机器人和自动驾驶。为了完成这项任务,我们提出了一种综合的视觉重定位方法,称为RLOCS,它结合了图像检索、语义一致性和几何验证来实现精确的估计。定位管道被设计成一个从粗到细的范式。在检索部分,我们将ResNet101-GeM-ArcFace的架构级联起来,采用DBSCAN,然后进行空间验证,以获得更好的初始粗略姿势。我们设计了一个叫做观察约束的模块,它结合了几何信息和语义一致性来过滤异常值。在开放数据集上进行了全面的实验,包括R-Oxford5k和R-Paris6k的检索、Cityscapes的语义分割、AachenDay-Night和InLoc的定位。通过创造性地修改整个管道中的独立模块,我们的方法在具有挑战性的本地化基准上实现了许多性能改进。原文题目:RetrievalandLocalizationwithObservationConstraints原文:Accuratevisualre-localizationisverycriticaltomanyartificialintelligenceapplication

  • 数栈数据安全案例:混合云环境数据库备份容灾实现

    本文整理自:袋鼠云技术荟|数据安全(1):混合云环境数据库备份容灾实现https://github.com/DTStack/flinkxFlinkX是一个基于Flink的批流统一的数据同步工具,既可以采集静态的数据,比如MySQL,HDFS等,也可以采集实时变化的数据,比如MySQLbinlog,Kafka等,是全域、异构、批流一体的数据同步引擎,大家如果有兴趣,欢迎来github社区找我们玩~近些年,数据安全事件频发。作为企业的核心资产,数据的外泄、破坏都会导致不可挽回的经济损失和核心竞争力缺失。规范的制度建设、权限管理和变更流程是保证数据安全的重要落地措施。袋鼠云DBA团队承接多个客户的容灾架构设计需求,制定可靠、有效的容灾架构方案并推动落地。备份重于一切。我们会优先考虑数据库备份集的容灾设计:两地三中心VS混合云、权限分配&监控告警&恢复演练。基于混合云的备份容灾方案,已成功向多个客户输出。今天来谈一下阿里云—IDC混合云场景下的备份容灾设计:1.阿里云RDS等数据库产品,备份集、binlog保留在OSS对象存储,下载后可见;同时提供备份/日志API接口,用于编程

  • MySQL 用户管理和权限管理

    在项目中,一个数据库有很多人需要使用,不能所有的人都使用相同的权限,如果人比较多,一人一个用户也很难管理。一般来说,会分超级管理员权限,管理员权限,读写权限,只读权限等,这样方便管理。当然,具体怎么管理权限根据实际情况来确定。无论如何,都需要创建多个用户来管理权限。root是数据库的超级管理员用户,对于普通开发人员来说,权限太大了,如果不小心做了一些不可逆的操作,后果是非常严重的,并且还不容易查出责任人。所以root用户不会让开发人员使用,一般会由DBA或运维人员统一管理,如果没有DBA,统一由超级管理员root来分配。1.查看所有用户MySQL中所有的用户及权限信息都存储在默认数据库mysql的user表中。进入mysql数据库,通过descuser;可以查看user表的结构。usemysql; descuser;复制可以看到user中有40多个字段,字段非常多,只要关注主要字段就行了。其中的主要字段有:host:允许访问的主机地址,localhost为本机,%为任何主机。 user:用户名。 authentication_string:加密后的密码值。使用select*fromu

  • LeetCode 1568. 使陆地分离的最少天数(DFS)

    文章目录1.题目2.解题1.题目给你一个由若干0和1组成的二维网格grid,其中0表示水,而1表示陆地。 岛屿由水平方向或竖直方向上相邻的1(陆地)连接形成。如果恰好只有一座岛屿,则认为陆地是连通的;否则,陆地就是分离的。一天内,可以将任何单个陆地单元(1)更改为水单元(0)。返回使陆地分离的最少天数。示例1: 输入:grid=[[0,1,1,0],[0,1,1,0],[0,0,0,0]] 输出:2 解释:至少需要2天才能得到分离的陆地。 将陆地grid[1][1]和grid[0][2]更改为水,得到两个分离的岛屿。 示例2: 输入:grid=[[1,1]] 输出:2 解释:如果网格中都是水,也认为是分离的([[1,1]]->[[0,0]]),0岛屿。 示例3: 输入:grid=[[1,0,1,0]] 输出:0 示例4: 输入:grid=[[1,1,0,1,1], [1,1,1,1,1], [1,1,0,1,1], [1,1,0,1,1]] 输出:1 示例5: 输入:grid=[[1,1,0,1,1], [1,1,1,1,1], [1,1,0,1,1], [1,1,1,1

  • (已解决)'ng' 不是内部或外部命令,也不是可运行的程序或批处理文件

    前言:  之前在安装Angular环境的时候有个问题,就是通过命令成功安装了angularcli脚手架工具,但是在终端(win+rcmd)中输入ngversion一直提示的是'ng'不是内部或外部命令,也不是可运行的程序或批处理文件,然后重复删除安装了多次都是一样,最后发现原来没有添加到系统盘的环境变量中去。通过命令成功安装了Angular脚手架工具:npminstall-g@angular/cli复制解决方法:1、首先查看node和npm环境是否正常:node-v npm-v复制2、如果上面的正常则有可能是npm全局环境变量路径配置问题:将node的全局环境变量位置一般默认在C盘中(C:\Users\yaoshuanggui\AppData\Roaming\npm),把对应路径加到环境变量中(电脑->属性->高级配置->环境变量->Path)3、配置完成重新打开终端输入ngv:[拓展]改变npm全局安装默认路径:首先为什么要改变npm全局安装的默认路径呢?因为它的默认路径是在C盘中,假如安装的东西较多那么系统盘内存会越来越多,因此我们需要修

  • Seurat 4.0 || 单细胞BMNC多模态参考数据集

    分享是一种态度作者|周运来男,一个长大了才会遇到的帅哥,稳健,潇洒,大方,靠谱。一段生信缘,一棵技能树。生信技能树核心成员,单细胞天地特约撰稿人,简书创作者,单细胞数据科学家。前情回顾Seurat4.0||您的单细胞数据分析工具箱上新啦 Seurat4.0||单细胞多模态数据整合算法WNN Seurat4.0||分析scRNA和膜蛋白数据 Seurat4.0||WNN整合scRNA和scATAC数据 Seurat4.0||单细胞PBMC多模态参考数据集正文多模态数据越来越多地用来分析单细胞的状态,在之前的文章中我们介绍了PBMC的多模态数据集,它使我们可以快速方便地定义PBMC细胞类型。这里我们绘制了一个人类骨髓单核细胞(BMNC)数据集,这些细胞来自8个捐赠者,由人类细胞图谱(HCA)制作。我们使用人类BMNC的CITE-seq参考数据集,并使用加权最近邻分析(WNN)进行分析。这里展示了与的PBMC示例相同的参考数据映射功能。此外,我们还将演示:如何构造一个监督的PCA(sPCA)转换如何映射多个数据集到同一个参考数据集上优化步骤,进一步提高映射速度library(Seurat)

  • 问题 1117: K-进制数

    考虑包含N位数字的K-进制数.定义一个数有效,如果其K-进制表示不包含两连续的0.例: 1010230是有效的7位数 1000198无效 0001235不是7位数,而是4位数.给定两个数N和K,要求计算包含N位数字的有效K-进制数的总数.假设2<=K<=10;2<=N;4<=N+K<=18.思路:DFS#include<bits/stdc++.h> usingnamespacestd; chars[10]; intres=0; intn,k; voiddfs(intans){ if(ans==n)res++; elsefor(inti=0;i<k;i++){ s[ans]=i+'0'; if(s[0]=='0'||(s[ans]=='0'&&s[ans-1]=='0'))continue; elsedfs(ans+1); } } intmain(){ cin>>n>>k; dfs(0); cout&

  • 卧槽!VSCode 上竟然也能画流程图了???

    大家好,我是小G。作为一款开源的主流代码编辑器,VSCode在发布之后一直受到不少开发者的喜爱。此前,我们也曾在GitHubDaily公众号上分享过多篇文章,向大家推荐了不少VSCode上比较实用(或沙雕)的插件:装上这几个VSCode插件后,上班划水摸鱼不是梦超实用:10款开发必备的VSCode插件!10个炒鸡好用的VSCode插件“神器”!因此,有很多水友也经常调侃道,这世界上就不存在VSCode做不到的事。看到大家对VSCode如此痴迷,那今天小G就再给大家推荐一款实用的VSCode插件:VSCodeDrawio。听到这个名字,你应该大致就能猜想到,它跟drawio应该有不小的渊源。是的,在不久前,一位来自德国前端工程师HenningDieterichs成功将draw.io的功能集成进了VSCode,并打包成了插件供开发者下载使用,让你分分钟能用VSCode画出完美的流程图、思维导图与UML图。它的具体效果,就像下面这样:一些水友可能对draw.io这款产品不太了解,这里跟大家简单介绍下:draw.io是一个支持在线绘图的网站工具,因其界面简洁直观,功能丰富强大而受到不少用户喜爱

  • day14-生成器进阶

    1.send()''' defgenerator(): print(123) yield1 print(456) yield2 print(789) g=generator() ret=g.__next__() print(ret) ret=g.send(None)#send的效果和_next_一样 print(ret) ''' defgenerator(): print(123) content=yield1 print(content) print(456) yield2 g=generator() ret=g.__next__() print(ret) ret=g.send('hello')#send的效果和_next_一样 print(ret) #send和_next_效果一样,他在打印出第二个yield之前,还将send里面的hello传给content,所以也会打印出hello。 #result: #123 #1 #hello #456 #2复制使用send注意事项:(1)第一次使用生成器

  • 帮你找个机器人聊天保姆,不要998,不要98,只要9.8行Python代码!

    做一个简单的机器人聊天工具,你会做的很智能吗?你不会。但是它会!--->http://www.tuling123.com我们这次就用图灵聊天机器人来给我做自动回复,不需要像以前那么死板了那么首先我们需要注册一个账号,开启属于自己的机器人:登录tuling123的网址点击立即注册需要输入手机号,邮箱和验证码,点击注册即可完成注册。注册完毕之后,我们进入主页面去创建一个自己的机器人:点击“创建机器人”之后,进入信息填写页面:把改写的信息填写好之后点击创建即可!创建完毕会跳转到以下界面:这个时候我们只需要记住自己的apikey即可,我们待会儿敲代码的时候可以直接把key粘贴过来。apikey:32d79dfcb1c24f61aa97472de8ffdc4d(这是我刚注册的apikey,如果有懒人,可以直接拿过去用了)准备工作做完之后,下面我们就开始代码阶段了,既然我们是要做微信的自动回复那肯定少不了itchat这个包了:pipinstallitchat那现在我们就开始我们的代码阶段吧:首先我们需要导入需要用到的模块:importrequestsimportitchatfromitcha

  • python项目练习九:文件共享2-GUI版本

    有了前面的P2P基础,这一个练习就是给程序加一个可视化的界面,俗称GUI。python里面的界面库有很多,如wxPython、wgGTK、tkinter,还有QT,按照书中的实例,我也使用wxPython来做界面。话说有了这个界面之后,我发现迅雷的网邻也不过如此(稍有夸张的成份),不过这个项目的练习之上再继续扩展的话,基本效果可以达到网邻的那种,如果有时间的话我可以继续扩展这个项目。下面就开始编写GUI。这个里面的主要的问题应该都集中在界面上,远程共享的代码已经不需要修改了,只需要把现在的界面接上前面的代码就ok。这个wxPython库的使用,我觉得和以前使用java的awt编写界面没啥区别,没有什么难点,只是需要理解里面的几个概念,像是按钮、文本框、绑定事件,仅此而已。还是来看代码吧:..code::pythonfromxmlrpclibimportServerProxy,Fault fromserverimportNode,UNHANDLED#引入前面的程序 fromclientimportrandomString#引入前面的程序 fromthreadingimportThread

  • 简单聊聊HTTP/TCP/IP协议

    HTTP协议一丶什么是HTTP协议:  HTTP协议是hypertexttransferprotocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器服务器之间交换数据的过程,客户端连上web服务器后,若想获得web服务器中的某个资源,需遵守一定的通讯格式,HTTP协议用于定义客户端与web服务器通讯的格式。二丶HTTP协议的版本有以下两种:  HTTP协议版本:HTTP/1.0、HTTP/1.1三丶HTTP/1.0和1.1的区别  在HTTP1.0协议中,客户端与web服务器建立连接后,只能获得一个web资源。  在HTTP1.1协议中,允许客户端与web服务器建立连接后,在一个连接上获取多个web资源。四丶HTTP协议请求:  1:HTTP协议请求由三部分组成,(请求行,消息报头,请求正文)  2:请求行:      请求行以一个方法符号开头,以空格分开,后面跟着请求的URL和协议的版本。      格式如下:          MethodRequest-URLHTTP-VersionCRLF      Method:表示请求方法。     

  • 沙龙报名 | 无线技术工程化,4月21日上海

    移动互联网经过近十年的快速发展,各大厂商都已将业务重心从PC端迁移至移动端,在迁移过程中,移动研发团队也从最初的两三人成长到现在几十上百名工程师的规模。与此同时,各种工程问题随之而来,复杂度线性增长。为了支撑如此多的工程师并行开发,提高研发效率,工程化改造和优秀技术框架的引入是规模化研发团队的必由之路。无线端技术与服务端技术相比,工程化的经验很难通用,因此需要针对iOS、Android、ReactNative等不同领域开发相应的工程化技术,同时以平台化的方式实现公共技术的支撑,覆盖从开发、集成、测试、发布到运营的完整研发生命周期。此次携程无线技术沙龙将邀请业内知名互联网公司,分享不同业务和团队规模下的无线技术与工程化实践经验,希望能够为大家在工程化的探索上提供借鉴和灵感。点击文末“阅读原文”报名~活动信息【时间】4月21日(周六)13:00-17:10【地点】上海市长宁区金钟路968号,凌空SOHO12号楼【议程】13:00-13:30签到13:30-14:10《Android工程模块化平台设计》-饿了么张涛14:10-14:50《iOS工程模块化实践与优化》-bilibili张忻正1

  • 简单的滑动条

    今天要做个滑动条如图:用jqueryUI实现<!DOCTYPEhtml> <htmllang="en"> <head> <metacharset="UTF-8"> <title>简单的滑动条插件</title> <linkrel="stylesheet"href="js/jQueryUi/jquery-ui.min.css"> <scriptsrc="js/jquery-1.11.3.min.js"></script> <scriptsrc="js/jQueryUi/jquery-ui.min.js"></script> <style> .slidebox{position:relative;padding-top:30px;width:300px;margin:15px;} .slidebox.s_span{position

  • 元数据(MetaData)

    元数据是用来描述数据的数据(Datathatdescribesotherdata)。单单这样说,不太好理解,我来举个例子。下面是契诃夫的小说《套中人》中的一段,描写一个叫做瓦莲卡的女子:(她)年纪已经不轻,三十岁上下,个子高挑,身材匀称,黑黑的眉毛,红红的脸蛋--一句话,不是姑娘,而是果冻,她那样活跃,吵吵嚷嚷,不停地哼着小俄罗斯的抒情歌曲,高声大笑,动不动就发出一连串响亮的笑声:哈,哈,哈!这段话里提供了这样几个信息:年龄(三十岁上下)、身高(个子高挑)、相貌(身材匀称,黑黑的眉毛,红红的脸蛋)、性格(活跃,吵吵嚷嚷,不停地哼着小俄罗斯的抒情歌曲,高声大笑)。有了这些信息,我们就可以大致想像出瓦莲卡是个什么样的人。推而广之,只要提供这几类的信息,我们也可以推测出其他人的样子。这个例子中的"年龄"、"身高"、"相貌"、"性格",就是元数据,因为它们是用来描述具体数据/信息的数据/信息。当然,这几个元数据用来刻画个人状况还不够精确。我们每个人从小到大,都填过《个人情况登记表》之类的东西吧,其中包括姓名、性别、

  • 复活~

    早已从OI退役,博客也要开始新的使命了。 可能记录一些新的知识,可能记录一些大学生活,可能随便写一点什么 以前的内容就留着吧

  • 2016ACM/ICPC亚洲区大连站现场赛题解报告(转)

    http://blog.csdn.net/queuelovestack/article/details/53055418     下午重现了一下大连赛区的比赛,感觉有点神奇,重现时居然改了现场赛的数据范围,原本过的人数比较多的题结果重现过的变少了,而原本现场赛全场过的人最少的题重现做出的人反而多了一堆,不过还是不影响最水的6题,然而残酷的现实是6题才有机会拿铜...(╥╯^╰╥) 链接→2016ACM/ICPC亚洲区大连站-重现赛    Problem1001WrestlingMatch Accept:0  Submit:0TimeLimit:2000/1000MS(Java/Others)MemoryLimit:65536/65536K(Java/Others)  ProblemDescription Nowadays,atleastonewrestlingmatchisheldeveryyearinourcountry.Therearealotofpeopleinthegameis"goodpl

  • IDEA 在 maven 项目打 war 包时将外部第三方引入的 jar 包

    项目打war包发布时,由于引入了第三方Jar包,导致打包失败,打包不成功。接下来我就将maven打包需要引入额外的Jar包详细过程分享出来,有问题大家一起讨论。 一、配置补全的pom文件中打包的插件依赖 原始默认使用打包插件依赖 <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin>复制 修改后的打包插件【需要导入系统之外的Jar包】 <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <includeSystemScope>true</includeSystemScop

  • vue中将html字符串转换成html后的一些问题

      今天整理之前做vue项目时遇到的一些问题,发现了当时遇到的一个很小但是又会引出很多问题的一个问题(总之就是很有意思,听我慢慢给你到来),这个问题就是当时处理后端数据时,如何将后端返回来的字符串转换成html标签,其实根据vue官网的一个v-html方法是不是觉得很简单,当时我也是这样想的,可是我发现了几个问题(官网给出的动态渲染任意HTML容易导致 XSS攻击的问题我就不说了,在这里我只是用它来渲染数据):   第一,当我用v-html将后端字符串转换成了html标签后,发现我在那个字符串中解析出来的html里面设置的样式没有加上;   第二,当我们使用v-html的时候,是会自动生成一个div标签的,有时候这个小小的div标签可能会影响到我们的布局,这个时候你会想到用template来替代div不就完事了,可是很不幸,给出我试验后的结果让你看看吧:  <divv-html="'<p>渴望成为大牛的男人</p>'"></div>              //页面上成功渲染出了我们想要的p标签,但同时它的外围也被一个di

  • windows10安装集成环境wampserver,刚开始可以用图标是绿色的,但是过一段时间,启动后呈橙色,重启也不行

    安装集成环境wampserver,启动后呈橙色,重启也不行。 下面我来介绍一下我的解决方案 改apache里配置文件里的内容: 首先将C:\wamp64\bin\apache\apache2.4.39\conf\http.conf文件里的侦听端口从默认的数值改成了8080. 原本为 #Listen 12.34.56.78:80Listen 0.0.0.0:80Listen [::0]:80 后来改为如图所示 ​ 重新启动,可爱的小绿标又回来了 ​ 我是小关,关注我,带你从初级入门编程希望能帮到大家,问你们要一个赞,你们会给吗,谢谢大家版权声明:本文版权归作者(@攻城狮小关)和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。大家写文都不容易,请尊重劳动成果~交流加Q:1909561302CSDN地址https://blog.csdn.net/Mumaren6/

相关推荐

推荐阅读