摘要:
import java.util.HashMap; import java.util.Map; public class PrimeNumber { public static void main(String[] args) { boolean res = isPrime(7); System.out.println(res); Map map = primeFactor(1... 阅读全文
摘要:
同余方程组: 先来看一道题目:有物不知其数,三三数之剩二;五五数之剩三;七七数之剩二。问物几何? 然后我们可以做如下变换,设x为所求的数。 x%3=2 x ≡ a1(%m1) ① x%5=3 > x ≡ a2(%m2) ② x%7=2 x ≡ a3(%m3) 根据前面两式可以得到 x = a1+m1 阅读全文
摘要:
逆元: 同余方程 ax≡1(mod n),gcd(a,n) = 1 时有解,这时称求出的 x 为 a 的对模n的乘法逆元。(注意:如果gcd(a,n)如果不等于1则无解),解法还是利用扩展欧几里得算法求解方程 ax + ny = 1 求出 x。 题目:HDU-1576 思路:设(A/B)%9973 阅读全文
摘要:
模运算: 取模:计算除以m的余数,叫做对m取模 同余:将a,b对m取模的结果相同,记为 a ≡ b (mod m)(例如: x % 3 = 2 > x ≡ 2(%3),x余3等于2,和2同余),即 a mod m == b mod m 如果 a ≡ b (mod m),且c ≡ d (mod m), 阅读全文
摘要:
题目: 思路:暴力搜索或者扩展欧几里得算法( 97x-127y=1 ax+by=m ) 代码: 阅读全文
摘要:
先来看看欧几里得算法: 接着再来看裴蜀(贝祖)等式:对于任何整数a、b和它们的最大公约数d,关于未知数x和y的线性丢番图方程(称为裴蜀等式):ax+by = m 有整数解时当且仅当m是d的倍数。x、y可用扩展欧几里得算法求得。特别地,方程ax+by=1 有整数解当且仅当整数a和b互质。 那什么是扩展 阅读全文
摘要:
阅读全文
摘要:
先来看看Nim定理: 再来看这道题目: 我们可以将和尚从后往前(从左到右)两两配对,若为奇数则在最高位补充一个假想的和尚,在同一对和尚中,如果对手移动前一个和尚,你总能移动后一个和尚相同的步数,所以一对和尚的前一个和尚与前面一对和尚的后一个和尚之间有多少台阶是没有影响的。所以只要考虑同一对和尚之间有 阅读全文
摘要:
注意程序输出:+号代表放在左盘,-号放在右盘。 思路:联想二进制枚举,这里显然其实是一种三进制枚举。 这里本质上是选或不选的问题,就是要将砝码放左or放右即+or-表达式的问题。但是得到的三进制值是由0 1 2组成,不好准确的表达是选还是不选的问题,于是我们可以想办法把0 1 2变成1 0 -1。于 阅读全文
摘要:
题目:给定一个字符串,求最长重复子串,这两个子串不能重叠。例如,str = "acdcdcdcd",则不可重叠的最长子串为"cdcd"。 思路:二分枚举+height数组分组。这道题的思想很巧妙,后面要仔细推敲。先二分答案,把题目变成判定性问题:判断是否存在两个长度为k的子串是相同的,且不重叠。解决 阅读全文
摘要:
题目:求最长重复子串长度(可重复或者可交叉),例如 str = "abcbcbcbc",则最长重复子串为 "bcbcbc",最长重复子串长度为6。 思路:这道题用暴力解法的话不太现实,就算能实现效率也比较低。那这里用到的就是后缀数组+高度数组就能解决问题,这里有个规律:任何的子串都是某一个后缀数组的 阅读全文
摘要:
题目大意:求字符串的前缀是否为周期串,若是,打印出循环节的长度以及循环次数。 这道题考察的是KMP算法中next数组的应用,必须理解透next[]数组代表的含义才t能通过它解决这道题。思路是先构造出 next[] 数组,下标为 i,定义一个变量 t = i - next[i] 就是next数组下标和 阅读全文
摘要:
注意:这道题的解法和最短摘要一样,都是采用尺取法解决问题,注意这儿题目要求恰好包含,也就是说这个hiho字符串必须包含2个'h'、1个'i'和1个'o'。一个不能多,一个也不能少。 结果: 尺取法的模型:根据区间的特征交替推进左右端点求解问题,其高效的原因在于避免了大量的无效枚举,其区间枚举都是根据 阅读全文
摘要:
一、什么是后缀数组: 字符串后缀Suffix 指的是从字符串的某个位置开始到其末尾的字符串子串。后缀数组 Suffix Array(sa) 指的是将某个字符串的所有后缀按字典序排序之后得到的数组,不过数组中不直接保存所有的后缀子串,只要记录后缀的起始下标就好了。 比如下面在下面这张图中,sa[8] 阅读全文
摘要:
什么是KMP算法: KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt同时发现,因此人们称它为克努特——莫里斯——普拉特操作(简称KMP算法)。KMP算法的关键是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是实 阅读全文