余数

P1017 进制转换

家住魔仙堡 提交于 2019-12-03 21:10:56
题目描述 我们可以用这样的方式来表示一个十进制数: 将每个阿拉伯数字乘以一个以该数字所处位置的(值减 11 1)为指数,以 1010 1 0为底数的幂之和的形式。例如: 123123 1 2 3可表示为 1×102+2×101+3×1001 \times 10^2+2\times 10^1+3\times 10^0 1 × 1 0 2 + 2 × 1 0 1 + 3 × 1 0 0这样的形式。 与之相似的,对二进制数来说,也可表示成每个二进制数码乘以一个以该数字所处位置的(值 −1-1 − 1)为指数,以 22 2为底数的幂之和的形式。一般说来,任何一个正整数 RR R或一个负整数 −R-R − R都可以被选来作为一个数制系统的基数。如果是以 RR R或 −R-R − R为基数,则需要用到的数码为 0,1,....R−10,1,....R-1 0 , 1 , . . . . R − 1。例如,当 R=7R=7 R = 7时,所需用到的数码是 0,1,2,3,4,50,1,2,3,4,5 0 , 1 , 2 , 3 , 4 , 5和 66 6,这与其是 RR R或 −R-R − R无关。如果作为基数的数绝对值超过 1010 1 0,则为了表示这些数码,通常使用英文字母来表示那些大于 99 9的数码。例如对 1616 1 6进制数来说,用 AA A表示 1010 1 0,用 BB

最大公约数算法

a 夏天 提交于 2019-12-03 10:24:31
欧几里得算法(辗转相除法) 具体思路是: 这条算法基于一个定理:两个正整数a和b(a>b),它们的最大公约数等于a除以b的余数c和b之间的最大公约数。 首先,我们先计算出a除以b的余数c,把问题转化成求出b和c的最大公约数;然后计算出b除以c的余数d,把问题转化成求出c和d的最大公约数;再然后计算出c除以d的余数e,把问题转化成求出d和e的最大公约数……以此类推,逐渐把两个较大整数之间的运算简化成两个较小整数之间的运算,直到两个数可以整除,或者其中一个数减小到1为止。 ———————————————— 版权声明:本文为CSDN博主「J0han」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接: https://blog.csdn.net/J0Han/article/details/82467335 该版本的代码运行会出现不可知的错误,所以又找了如下链接可运行 https://www.cnblogs.com/tianqizhi/p/8341415.html 来源: https://www.cnblogs.com/sisterben/p/11790968.html

【牛客网】进制转化(大整数)

匿名 (未验证) 提交于 2019-12-03 00:22:01
将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。 输入描述: 多组数据,每行为一个长度不超过30位的十进制非负整数。 (注意是10进制数字的个数可能有30个,而非30bits的整数) 输出描述: 每行输出对应的二进制数。 只是十进制转二进制的话,并没有难度。就是依次去%2,直到被除数为0,将得到的余数倒叙保存下来就可以了。 现在的问题是30位已经超出了long long的范围,只能用字符串来表示。input表示输入的字符串,模拟除法运算的过程,从第一位开始除以2,得到的商记录在上面,余数落下来,与后一位组合做下一步的除以2运算。到最后一位时,就可以保存%2的结果为余数;重复这个过程直到被除数为0,也就是转化为二进制的过程结束。 #include<cstdio> #include<iostream> #include<vector> #include<algorithm> #include<string> #include<cctype> #include<cmath> using namespace std ; int main() { string input; string result; while ( cin >>input) { int lenin = input.length(); result = "" ; int k = 0 ; int

Python递归函数的正确理解与使用

匿名 (未验证) 提交于 2019-12-02 22:51:30
先看一个题目: 题面描述 小明很喜欢学数学,并且喜欢做一些奇怪的题,这天他想知道对于给定的 N ,有多少个 M 满足“ M<=N, gcd(N,M)==1, M 是偶数”。请你编写程序帮助小明解决这个问题。 输入数据 输入数据第一行为一个正整数 T ,表示测试数据的组数。 接下来的 T 组测试数据中, 每组测试数据为一行,包含一个整数 N (1≤T≤100, 1≤N≤10000 )。 输出数据 对于每一组输入数据,在单独的一行中输出 ”Case #id: M”, 表示第 id 组数据结果是 M , id 从 1 开始; 样例输入 4 1 2 11 23 样例输出 Case #1: 0 Case #2: 0 Case #3: 5 Case #4: 11 Hint: gcd(a,b)==1 表示 a 与 b 的最大公约数为 1 ,即 a 与 b 互素。 讲讲算法思路 分析输入输出与显示 源代码与递归函数的精华所在 1.两个数互素:最小公约数为1。我们只要把大一点的数%较小的数,上一轮较小的数%这个余数又得到一个余数,每次判断这个余数是0还是1。只要有0出现就不互素。 2.输入用list[]保存。输出的序号可以在循环里面计数。输出赋值:print('Case #%d: %d'%(x,y)) 3. #求法,可能会用到函数,递归函数等 def gcd(x,y):#定义递归函数 if x>=y

memcached

廉价感情. 提交于 2019-12-02 17:04:36
简介Memcached memcached是高性能的分布式内存缓存服务器。它通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。memcached的API使用32位元的循环冗余校验(CRC-32)计算键值后,将资料分散在不同的机器上。当表格满了以后,接下来新增的资料会以LRU机制替换掉。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon)是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信 Memcached的分布式算法 A.余数哈希:根据服务器台数的余数进行哈希,求得键的哈希值,再处理服务器台数,根据余数选择服务器, 缺点:当添加或者移除服务器时,缓存重组的代价太大, 当添加服务器,要进行重哈希,会导致原来的服务器序号变了,下一次找不到,访问数据,Memcached命中率下降,那么就增加了数据库服务器的负载. B.一致性哈希:一致性哈希是将整个哈希值空间组织成一个虚拟的圆环,如假设某哈希函数H的值空间是0~(2^32 -1)(即哈希值是一个32位的无符号整型),这个哈希空间为环。然后让每台机器占一个扇形空间。 举个例子:余数哈希相当于一个萝卜一个坑,刚刚好,这时候在中间新挖一个坑,下一次去拿的时候会按照原有逻辑,会导致最后一个有萝卜的坑没被拿到丢了

29. 两数相除

烈酒焚心 提交于 2019-12-02 11:08:19
给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。 返回被除数 dividend 除以除数 divisor 得到的商。 示例 1 : 输入 : dividend = 10 , divisor = 3 输出 : 3 示例 2 : 输入 : dividend = 7 , divisor = - 3 输出 : - 2 说明 : 被除数和除数均为 32 位有符号整数。 除数不为 0 。 假设我们的环境只能存储 32 位有符号整数,其数值范围是 [ − 231 , 231 − 1 ] 。本题中,如果除法结果溢出,则返回 231 − 1 。 来源:力扣(LeetCode) 链接:https : / / leetcode - cn . com / problems / divide - two - integers 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 添加链接描述 /** * 解题思路:这题是除法,所以先普及下除法术语 * 商,公式是:(被除数-余数)÷除数=商,记作:被除数÷除数=商...余数,是一种数学术语。 * 在一个除法算式里,被除数、余数、除数和商的关系为:(被除数-余数)÷除数=商,记作:被除数÷除数=商...余数, * 进而推导得出:商×除数+余数=被除数。 * * 要求商

CRC码计算及校验原理的最通俗诠释

孤街醉人 提交于 2019-12-02 10:48:39
循环冗余校验检错方案 奇偶校验码(PCC)只能校验一位错误,本节所要介绍的循环冗余校验码(CRC)的检错能力更强,可以检出多位错误。 1. CRC校验原理 CRC校验原理看起来比较复杂,好难懂,因为大多数书上基本上是以二进制的多项式形式来说明的。其实很简单的问题,其根本思想就是先在要发送的帧后面附加一个数(这个就是用来校验的校验码,但要注意,这里的数也是二进制序列的,下同),生成一个新帧发送给接收端。当然,这个附加的数不是随意的,它要使所生成的新帧能与发送端和接收端共同选定的某个特定数整除(注意,这里不是直接采用二进制除法,而是采用一种称之为“模2除法”)。到达接收端后,再把接收到的新帧除以(同样采用“模2除法”)这个选定的除数。因为在发送端发送数据帧之前就已通过附加一个数,做了“去余”处理(也就已经能整除了),所以结果应该是没有余数。如果有余数,则表明该帧在传输过程中出现了差错。 【说明】“模2除法”与“算术除法”类似,但它既不向上位借位,也不比较除数和被除数的相同位数值的大小,只要以相同位数进行相除即可。模2加法运算为:1+1=0,0+1=1,0+0=0,无进位,也无借位;模2减法运算为:1-1=0,0-1=1,1-0=1,0-0=0,也无进位,无借位。相当于二进制中的逻辑异或运算。也就是比较后,两者对应位相同则结果为“0”,不同则结果为“1”。如100101除以1110

CRC多项式转换二进制

∥☆過路亽.° 提交于 2019-12-02 05:18:11
1.多项式与二进制的直接对应关系:   X的最高次幂对应二进制的最高位数;以下各位对应多项式的各幂次,有幂次对应1,无幂次对应0;X的最高次幂是R,转换对应的二进制数R+1位; 2.多项式的生成:   发送方的接收方的约定的一个二进制数;在传输过程中始终不变。在发送方,利用生成多项式对信息多项式做模2除生成校验码,在接收方,利用生成多项式对收到的编码多项式做模2除检测和确定错误位置。   应满足:a、生成多项式的最高位和最低位必须为1。       b、当被传送信息(CRC码)任何一位发生错误时,被生成多项式做模2除后应该使余数不为0。       c、不同位发生错误时,应该使余数不同。       d、对余数继续做模2除,应使余数循环 来源: https://www.cnblogs.com/zhangweigang/p/11731572.html

进制转换 之 商和余数 [AtCoder-4239] Base -2 Number 负二进制数

a 夏天 提交于 2019-12-02 02:52:18
https://vjudge.net/problem/AtCoder-4239 水题。 关于进制转换,就相当于以怎样的基数(余数)来看待一个数字。 题目大致是让我们将一个整数(-1e9~1e9)转化为负二进制数,并且由01串组成。 在表达的时候是不会出现-1搭配的情况的如(-3)不是(-1-1),而是1101,而我们计算n对(-2)取余的时候是会出现-1的,因此我们要把这个-1变成正1。举个例子,对于-5转化为负二进制,第一步为 -5= (-2 )*2(2为商)+(-1),我们要把最后这个(-1)变为1,那么只有改变商,即-5=(-2)*(2+1)+1。此时就得到了我们要的1 . 那么在处理的时候,就在标准的迭代中增加一个,如果余数为-1,不符合表达要求,就改为余数为1,而本身的值减2,使得经过处理的数再进入下一次的转换。 注意特判0。 #include <bits/stdc++.h> using namespace std; const int maxn = 2e5; int n; int dig[maxn]; int main() { ios::sync_with_stdio(false); cin.tie(0); cin>>n; int cnt=0; if(n==0){ cout<<0<<endl; return 0; } while(n){ // cout<<n%(-2)<

关于gcd

与世无争的帅哥 提交于 2019-12-02 01:41:18
关于gcd 360这样说 百度这样告诉我 ( 并没有什么卵用) 其实都差不多的东西。。awa 咳咳。。。 我jio的lfd学长讲的灰常优秀,,, 辗转相除法, 又名欧几里德算法(Euclidean algorithm),是求最大公约数的一种方法。 它的具体做法是:用较小数除较大数,再用出现的余数(第一余数)去除除数,再用出现 的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。如果是求两个数的 最大公约数,那么最后的除数就是这两个数的最大公约数。 来源: https://www.cnblogs.com/ydclyq/p/11723842.html