异或

算法---二进制/二进制枚举

拥有回忆 提交于 2020-01-30 12:44:46
#一 二进制操作 算数位运算: 1、与(&): 对于指定的两个数A=60(0011 1100) B=13(0000 1101) 执行一下操作 A&B=12(0000 1100) 就是对二进制每一位进行了一次与操作,同为1,结果 为1,否则为0。 2、或(|): 对于指定的两个数A=60(0011 1100) B=13(0000 1101) 执行一下操作 A|B=61(0011 1101) 就是对二进制每一位进行了一次或操作,同为0,结果为0,否则为1 3、非 按位取反(~): 对于指定的一个数A=60(0011 1100) 执行以下操作 ~A=195(1100 0011) 就是对二进制每一位进行了一次取反操作,若二进制数位0,则变成1,否则变成0. 4、异或运算 异或,英文为exclusive OR,缩写成xor 异或(xor)是一个数学运算符。它应用于逻辑运算。异或的数学符号为“⊕”,计算机符号为“xor”。其运算法则为: a⊕b = (¬a ∧ b) ∨ (a ∧¬b) 如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。 异或也叫半加运算,其运算法则相当于不带进位的二进制加法:二进制下用1表示真,0表示假,则异或的运算法则为:0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同为0,异为1),这些法则与加法是相同的,只是不带进位。

java学习第一天

被刻印的时光 ゝ 提交于 2020-01-30 04:53:11
java学习第一天 使用异或运算简单加密字符串 实验代码 /* * 使用标准输出流扫描用户用户的输入的字符串 * 再通过异或运算吧字符串与一个指定的值进行异或运算 * 从而改变字符串每个字符的值 * 这样就可以得到一个加密或者解密后的值 * 然后再通过标准输出,显示到控制器上。 * */ import java.util.Scanner; public class Example_JianDanJiaMi { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入一个英文字符串或解密字符串"); String passwordString = scanner.nextLine(); char[] array = passwordString.toCharArray();//获取字符串数组 for (int i = 0; i < array.length; i++) { array[i] = (char)(array[i]^20000);//对每个数组元素进行异或运算 } System.out.println("加密或者解密的结果如下:"); System.out.println(new String(array));//输出

线性基

此生再无相见时 提交于 2020-01-29 23:54:06
线性基 概述 线性基,是一个线性空间(二元运算为异或)的极大线性无关子集 用于解决一系列集合异或和最值问题 注意与Trie树区别在于可以多个 性质 1.表示任意一个异或和方式唯一 2.所有子集异或和不为0 3.线性基内高位各不相同 4. \(tot\) 个位置可以表示 \(2^{tot}\) 种异或和 实现 先做一些定义 \(p_i\) 表示以第 \(i\) 位为最高位的 基底 \(dig_i\) 表示从低到高第 \(i\) 个有值的 位置 插入 从高到低考虑 \(x\) 的每一位(其实是当前的最高位) 若这一位 \(p\) 没有值直接插入 否则异或上这一位的 \(p\) 那么这一位以上的位均会变成0,并且如果他能插入应为线性无关的因此保证可正确性 操作直到成功插入或 \(x=1\) 后停止(线性有关) inline char Insert(re ll x){re int i;for(i=DIGIT;x;--i)if((x>>i)&1){if(p[i])x^=p[i];else return p[i]=x,1;}return 0;} 求子集最大/最小异或和 对最大:从高向低位贪心(线性基性质导致低位不会影响高位)能拼凑出当前位就拼 对最小:这个直接找到最高位最低的基即可 inline ll Find_max(void){ re int i;re ll res=0; for(i

[十二省联考2019]异或粽子

╄→尐↘猪︶ㄣ 提交于 2020-01-29 08:17:33
题目描述 小粽是一个喜欢吃粽子的好孩子。今天她在家里自己做起了粽子。 小粽面前有 nn 种互不相同的粽子馅儿,小粽将它们摆放为了一排,并从左至右编号为 11 到 nn。第 ii 种馅儿具有一个非负整数的属性值 ai 。每种馅儿的数量都足够多,即小粽不会因为缺少原料而做不出想要的粽子。小粽准备用这些馅儿来做出 k 个粽子。 小粽的做法是:选两个整数数 l, r,满足 1 \leqslant l \leqslant r \leqslant n1⩽l⩽r⩽n,将编号在 [l, r][l,r] 范围内的所有馅儿混合做成一个粽子,所得的粽子的美味度为这些粽子的属性值的异或和。(异或就是我们常说的 xor 运算,即 C/C++ 中的 ˆ 运算符或 Pascal 中的 xor 运算符) 小粽想品尝不同口味的粽子,因此它不希望用同样的馅儿的集合做出一个以上的 粽子。 小粽希望她做出的所有粽子的美味度之和最大。请你帮她求出这个值吧! 输入格式 第一行两个正整数 n, k,表示馅儿的数量,以及小粽打算做出的粽子的数量。 输出格式 输出一行一个整数,表示小粽可以做出的粽子的美味度之和的最大值。 输入输出样例 输入 #1复制 3 2 1 2 3 堆+Trie上第k大。 区间的异或,我们很容易通过前缀和转换成可以用Trie查询维护的数据结构。 Trie上怎么找第k大呢?我们类似于平衡树怎么找第k大呢

布尔代数及逻辑画简--习题

生来就可爱ヽ(ⅴ<●) 提交于 2020-01-28 15:27:35
异或: 【1】异或的数学符号为“⊕”,计算机符号为“xor”。 【2】运算法则为,a⊕b = (¬a ∧ b) ∨ (a ∧¬b) 【3】如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。 同或: 【1】同或符号为⊙ 【2】同真,异假。即,同或:相同为一,不同为零。 【3】a⊙b=ab+a’b’(a’为非a,b’为非b); 注意:逻辑代数之间的关系可以用并集交集的想法去理解 。 注意: 【1】反演和对偶的区别:反演变量也发生变化,对偶变量保持不变; 【2】注意运算的优先规则 利用消除冗余法即可得上述结果: 参考文献: 【1】https://wenku.baidu.com/view/695a4c6427d3240c8447ef34.html 来源: CSDN 作者: 菜鸟-求指导 链接: https://blog.csdn.net/qq_43042339/article/details/104097611

数组中只出现一次的数字--python

安稳与你 提交于 2020-01-28 09:49:34
#一个整型数组中除了两个数字之外,其他数字都出现了两次。找到这个两个只出现一次是数字。要求时间复杂度O(n),空间复杂度O(1) #思路1:字典,以数组中的数字为键,出现次数为值,最后找到值为1对应的键 def findOnceNum ( arr ) : if len ( arr ) < 2 : return None dict , res = { } , [ ] for i in arr : dict [ i ] = dict . get ( i , 0 ) + 1 for key in dict : if dict [ key ] == 1 : res . append ( key ) return res #思路2:异或思想,任何一个数字异或它自己都是0 #用异或求解。异或运算的性质:任何一个数字异或它自己都等于0 。如果数组中只有一个数字出现过一次,其余数字都出现了两次;这样的话如果我们从头到尾依次异或数组中的每一个数字, # 那么最终的结果刚好是那个只出现一次的数字,因为那些出现两次的数字全部在异或中抵消掉了。如果能够把原数组分为两个子数组,在每个子数组中,包含一个只出现一次的数字, # 而其它数字都出现两次。在两个子数组中分别求出这两个只出现一次的数字。 还是从头到尾依次异或数组中的每一个数字,那么最终得到的结果就是两个只出现一次的数字的异或结果。 #

多方安全计算-不经意间传输

 ̄綄美尐妖づ 提交于 2020-01-27 05:43:24
不经意传输(Oblivious Transfer - OT)最早在1981年被 Michael O. Rabin提出,之后被广泛应用于多方安全计算等领域。 在Rabin [1] 的OT协议中,发送者Alice发送一个信息m给接收者Bob,接收者Bob以1/2的概率接受信息m。所以在协议交互的结束的时候,发送者Alice并不知道Bob是否接受了消息,而接收者Bob能确信地知道他是否得到了信息m,从而保护了接收者的隐私性,同时保证了数据传输过程的正确性。该方法主要是基于RSA加密体系构造出来。 1985年S. Even, O. Goldreich, and A. Lempel [2] 提出了1-out-2 OT(如下图), 在此方案中发送者Alice每次发送2个信息 和 ,而接收者Bob每次输入一个选择 , 当协议结束的时候,发送者Alice无法获得关于接收者Bob的任何有价值的信息,而接收者Bob只能获得 ,对于 , 接收者Bob也一无所知。 在1986年,Brassard等人将1-out-2 OT扩展为1-out-n OT。 在实际应用中,不经意传输OT的一种实施方式是基于RSA公钥加密技术。一个简单的实施流程如下:首先,发送者生成两对不同的公私钥,并公开两个公钥,称这两个公钥分别为公钥1和公钥2。假设接收人希望知道m1,但不希望发送人知道他想要的是m1。接收人生成一个随机数k

循环校验码 CRC 原始报文为 “11001010101”,其生成多项式为:x^4^+x^3^+x+1.对其进行CRC编码后的结果为?

放肆的年华 提交于 2020-01-26 14:25:59
循环校验码 (CRC 是一种只能检错不能进行纠错的校验码) 他其实是利用了模2除法的计算方式 我用下面的例子简述一下使用方法。 原始报文为 “11001010101”,其生成多项式为:x 4 +x 3 +x+1.对其进行CRC编码后的结果为? 首先要先理解生成的多项式 x 4 +x 3 +x+1的含义,其中最高的次方代表二进制的位数,在本例中最高次方为4则生成的二进制数则有5位,x 4 代表最高位为1,其余以此类推将得到一串二进制码为 11011 所谓循环校验码的实现就是将原始报文除以这段二进制码,但是再除之前,需要对原始报文先进行补位,如何补位呢,这个也很好补,补上 生成的二进制数的位数-1个 0即可,所以报文将变成110010101010000(补上了4个0) 所以这个时候我们用 110010101010000 模二除以 11011 这里要切记,模二除法与普通的除法不同,模二的除法其实就是对数据进行异或处理。 什么是异或呢:异或运算是指: 参与运算的两个值,如果两个相应位相同,则结果为0,否则为1 所以进行异或运算得出结果为:0011 来源: CSDN 作者: nb_zsy 链接: https://blog.csdn.net/nb_zsy/article/details/104086327

你没听过的梅森旋转算法

戏子无情 提交于 2020-01-24 20:13:50
(标准开头) 如果单独提梅森旋转算法可能大家都很陌生,但如果说到C++11的random可能大家就都熟悉多了。事实上,C++,python等多种计算机语言的随机数都是通过梅森旋转算法产生的。(也有一个称呼是梅森缠绕算法) 那,本文就着重介绍这个梅森 螺旋 旋转算法 (算法本身挺学术的,我努力写得轻松点) 先在这里感谢一下@ dgklr 大佬的引导。如果没有他提及,笔者可能还不知道这个算法。 旋转算法简介 梅森旋转算法,也可以写作MT19937。是有由松本真和西村拓士在1997年开发的一种能快速产生优质随机数的算法。 其实这个算法跟梅森没有什么关系,它之所以叫做是梅森旋转算法是因为它的循环节是2^19937-1,这个叫做梅森素数。 如果看过我的那篇随机数的文章应该知道关于伪随机的一些知识。这个随机算法之所以说是产生“优质“”随机数,特点就是它的循环节特别长。而且产生的数分布是比较平均的。 可能有的同学对这个循环节有点质疑。可能觉得2^19937-1有点短? 我在这里大概给一个概念: 银河系中的恒星数量级10^11 撒哈拉沙漠中的沙子数数量级是10^26 宇宙中目前可观察的粒子数量级是10^87 2^19937数量级是10^6001 这个比较大概心里有数了吧 相差的已经不止是一个数量级了 同时他在623维中的分布都十分的均匀(这个不用理解) 知道分布平均就好了 (梅森镇楼) -

【模板】线性基

ぐ巨炮叔叔 提交于 2020-01-24 18:45:59
线性基 定义:给定数集 \(S\) ,以异或运算张成的数集与 \(Span{S}\) 相同的极大线性无关集,称为原数集的一个线性基。 线性基具有以下性质: 显然,线性基是原数集的一个子集。 线性基的张成集合中一般不包含有数字0。一般给定的数集中不会有0,否则在线性基中加入0即可。 张成集合中的每个数都可以唯一表示成基的线性组合。这与第一点是统一的。 将线性基中的一个元素通过“倍加变换”(在这里即异或上另一个元素),张成集合不变。 线性基中每一个元素的最高位均不同。 由以上性质不难看出,线性基与线性方程组有一些相似之处。事实上,如果把原数集的每一个元素二进制拆分为多项式,把每一项的系数看作一个向量,将所有系数向量看作一个矩阵的行,那么这个构造出的矩阵就可以看作某个线性方程组的系数矩阵。也就是说,对这个矩阵施以异或意义下的初等行变换,即将某些行消成0行,形成的新矩阵与原矩阵行等价。这给了性质5一个很好的阐释:每个元素的最高位对应的是该系数矩阵化为阶梯形后的主元位置,而主元可以将其他行的该项通过行变换消去,结合异或的性质就不难理解了。 以上基于线性代数的讨论表明,可以使用类似高斯消元的行化简算法求得原数集的一个线性基。把每个行向量压成一个数处理,时间复杂度 \(O(n^2)\) 。 具体来说,对于每一个新加入的数x,我们从高位到低位枚举;如果x的第i位是1(即对应方程左边含有这个元素)