精华内容
下载资源
问答
  • I'm curious in regards to the time and space complexities of the % operator in Python. Also, does Python use a bitwise operation for % 2?Edit:I'm asking about Python 2.7's implementation, just in case...

    I'm curious in regards to the time and space complexities of the % operator in Python. Also, does Python use a bitwise operation for % 2?

    Edit:

    I'm asking about Python 2.7's implementation, just in case it differs slightly from that of Python 3

    解决方案

    Python uses the classic Algorithm D from Knuth's 'The Art of Computer Programming'. The running time is (generally) proportional to the product of lengths of the two numbers. Space is proportional to the sum of the lengths of the two numbers.

    The actual division occurs in Objects/longobject.c, see x_divrem(). For background on the internal representation of a Python long, see Include/longintrepr.h.

    % 2 does not use bitwise operations. The standard idiom for checking if a number is even/odd is & 1.

    Python 2 and 3 use the same algorithm.

    展开全文
  • python 负数模运算First and foremost, sorry for the long absence recently. Work and study have been taking most of me in the last months. In fact, what I’m writing down Today is something I learnt ...

    python 负数模运算

    First and foremost, sorry for the long absence recently. Work and study have been taking most of me in the last months. In fact, what I’m writing down Today is something I learnt recently and thought it was worth sharing given that it quite surprised me and it’s a super useful fact to learn; how does Python handle modulo operation with negative numbers. So, let’s keep it short and sweet and get straight to it.

    首先,对于长期以来的缺席深表歉意。 在过去的几个月中,工作和学习一直困扰着我。 实际上,今天我写下的是我最近学到的东西,并认为值得分享,因为这让我很惊讶,这是一个非常有用的知识。 Python如何处理带负数的模运算 。 因此,让我们使其简短而有趣,直接使用它。

    The base logic behind the modulo operator indicates the following:

    模运算符后面的基本逻辑指示以下内容:

    For any two numbers, the modulo operator (%) returns the remainder of dividing the left-hand operand by right-hand operand. It’s used to get the remainder of a division problem. Beau Carnes at www.freecodecamp.org

    对于任何两个数字,取模运算符(%)返回左操作数除以右操作数的余数。 它用于获得除法问题的其余部分。 博·卡恩斯(Beau Carnes), 网址:www.freecodecamp.org

    The basic syntax is:

    基本语法为:

    • a % b = r

      a%b = r

    In the previous example a is divided by b, and the r, i.e. the remainder is returned. Let’s see an example with numbers now:

    在前面的示例中,a除以b,然后返回r,即余数。 现在来看一个带有数字的示例:

    • 7 % 2 = 1

      7%2 = 1

    The result of the previous example is one. Two goes into seven three times and there is one leftover. In a similar way if we were to choose two numbers where b > a we would get the following:

    上一个示例的结果为1。 有2次进入7次3次,剩下1次。 以类似的方式,如果我们选择b> a的两个数字,则会得到以下结果:

    • 3 % 4 = 3

      3%4 = 3

    This will result in three since four does not go into three any times so the original three remains.

    这将导致三个,因为四个不会在任何时候进入三个,因此原来的三个仍然存在。

    The sibling of the modulo operator is known as the integer division operation (//), where the fractional part, i.e. the remainder is discarded. Take the following example:

    模运算符的同级称为整数除法运算(//),其中小数部分(即余数)被丢弃。 请看以下示例:

    • 5 // 2 = 2

      5 // 2 = 2

    For positive numbers, there’s no surprise. However if one of the operands is negative, the result will be floored as well, i.e. rounded away from zero towards negative infinity, returning the largest integer less than or equal to x. For example:

    对于正数,不足为奇。 但是,如果其中一个操作数为负,则结果也将被累加,即从零向负无穷大舍入,返回小于或等于x的最大整数。 例如:

    • -5 // 2 = -3

      -5 // 2 = -3

    Now, there are several ways of performing this operation. Unlike C or C++, Python’s modulo operator always returns a number having the same sign as the denominator (divisor) and therefore the equation running on the back will be the following:

    现在,有几种执行此操作的方法。 与C或C ++不同,Python的模运算符始终返回与分母(除数)具有相同符号的数字,因此在背面运行的方程式如下:

    • mod = a — math.floor(a/b) * base

      mod = a — math.floor(a / b)*基数

    For example, working with one of our previous examples we’d get:

    例如,使用我们之前的示例之一,我们将获得:

    • mod = 7 — math.floor(7/2) * 2

      mod = 7 — math.floor(7/2)* 2

    • mod = 7–3*2 = 1

      mod = 7–3 * 2 = 1

    And the overall logic works according to the following premises:

    总体逻辑根据以下前提进行工作:

    • a/b = q with remainder r

      a / b = q,其余为r

    • Such that: b*q + r = a and 0 <= r < b

      这样:b * q + r = a且0 <= r <b

    Now, if we want this relationship to extend for negative numbers, there are a couple of ways of handling this corner case, but according to Wikipedia in mathematical number theory mathematicians prefer to stick to flooring towards negative infinity as in the following example:

    现在,如果我们希望将此关系扩展为负数,则有几种方法可以处理这种极端情况,但是根据Wikipedia的数学数论,数学家宁愿坚持朝负无穷大展开,如以下示例所示:

    • -500/27 = -18.51

      -500/27 = -18.51

    • math.floor(-500/27) = -19

      math.floor(-500/27)= -19

    Python follows the same logic. Why? According to Guido van Rossum, the creator of Python, this criterion has some interesting applications. For example, consider taking a POSIX timestamp (seconds since the start of 1970) and turning it into the time of day. Since there are 24*3600 = 86400 seconds in a day, this calculation is simply t % 86400. But if we were to express times before 1970 using negative numbers, other criterions used would give a meaningless result, while using the floor rule works out fine.

    Python遵循相同的逻辑。 为什么? 根据 Python的创建者Guido van Rossum的说法 ,该标准具有一些有趣的应用程序。 例如,考虑采用POSIX时间戳(自1970年初以来的秒数),并将其转换为一天中的时间。 由于一天中有24 * 3600 = 86400秒,因此此计算仅为t%86400。但是,如果我们要使用负数表示1970年之前的时间,则使用底限法则可以得出其他准则将无意义。精细。

    Finally, take into account the following when working with negative numbers:

    最后,在使用负数时请考虑以下因素:

    • If a < 0 then 0 <= r < b remains the same

      如果a <0,则0 <= r <b保持不变
    • But if b < 0 then 0 >= r > b

      但是如果b <0则0> = r> b

    Finally, let’s see a quick example for a = -500 and b = 12:

    最后,让我们看一下a = -500和b = 12的简单示例:

    • -500/12 = -41.67

      -500/12 = -41.67

    • -500 % 12 = 4

      -500%12 = 4

    • -500 // 12 = -42

      -500 // 12 = -42

    Then we can check for b*q + r = a:

    然后我们可以检查b * q + r = a:

    • 12 * -42 + 4 = -500

      12 * -42 + 4 = -500

    For closing up this story, let’s see an interesting application of using the modulo operator with negative numbers: converting an hour written in the 24-hour clock into the 12-hour clock. The challenge seems easy, right? For example, 23%2 will give us 11 and 15%12 will give us 3…exactly what we want! Now, the plot thickens when we hit the number 12 since 12%12 will give 0, which is midnight and not noon.

    为了结束这个故事,让我们看一下使用带负数的模运算符的有趣应用:将24小时制中写入的小时转换为12小时制。 挑战似乎很容易,对吧? 例如,23%2将给我们11,15%12将给我们3…正是我们想要的! 现在,当我们将数字设为12时,情节就会变厚,因为12%12会给出0,即午夜而非正午。

    The solution here is using the modulo operator with negative numbers. For example, -22%12 will give us 2 and -19/12 will give us 5. As a rule of thumb, this kind of operation will always give us how many units we have left until the next multiple of our denominator. I.e. in our first example we’re missing 2 hours until 12x2 and in a similar way -34%12 would give us 2 as well since we would have left 2 hours until 12x3.

    解决方案是使用带负数的模运算符。 例如,-22%12将给我们2,而-19/12将给我们5。根据经验,这种操作将始终给我们剩下多少单位,直到分母的下一个倍数为止。 也就是说,在我们的第一个示例中,我们错过了12x2之前的2小时,并且以类似的方式,-34%12也将为我们提供2,因为我们将剩下2个小时直到12x3。

    So, coming back to our original challenge, for converting an hour written in the 24-hour clock into the 12-hour clock, we could write the following:

    因此,回到我们最初的挑战,要将24小时制中写入的小时转换为12小时制,我们可以编写以下内容:

    def convert24to12(hour):
    return 12 — ((- hour) % 12)

    That’s all for today! If you enjoyed this story, don’t forget to visit my profile where you’ll find content such as:

    今天就这些! 如果您喜欢这个故事,请不要忘记访问我的个人资料,在其中找到诸如以下内容:

    See you around! And thanks for reading!

    再见! 并感谢您的阅读!

    翻译自: https://medium.com/@gonzaloferreirovolpi/modulo-operation-with-negative-numbers-in-python-18e3cedffe82

    python 负数模运算

    展开全文
  • ————Python模运算个人总结归纳———— a和b同为正整数的时候 如果 a < b 则结果为 a 3 % 5 = 3 10 % 20 = 10 123 % 756 = 123 .....诸如此类 如果 a > b 结果为 a — (b在...

    ————Python模运算个人总结归纳————

    a和b同为正整数的时候

    如果 a < b 则结果为 a

    						 3 % 5 = 3
    						 10 % 20 = 10
    						 123 % 756 = 123
    						 .....诸如此类
    
    如果 a > b 结果为 a — (b在范围a以内的最大倍数值)做差。
    						a = 6  
    						b = 2
    						6 - 2 * 3(6以内2的最大倍数值) = 0 
    						6 % 2 = 0
    
    						a = 121
    						b = 6
    						121 - 6 * 20(121以内的6的最大倍数值为120)
    						121 % 6 = 1
    

    a和b同为负整数的时候

    如果 a > b 则结果仍为 a
    						-4 % -8 = -4
    						-7 % -9 = -7
    						-1234 % -5678 = -1234
    						......诸如此类
    
    如果 a < b 则结果为 a — (b在范围a以内的最大倍数值)做差
    						 a = -8
    						 b = -3
    						-8 - (-3 * 2) (-8 以内-3的最大倍数值为-6) =  -2
    						-8 % -3 = -2
    

    结论一 同为负的模运算可以遵照同为正的整数模运算在结果前加(—)负号

    						-a % -b = -c 可以看作 a % b 后在结果前加符号
    						-a % -b = -c   等价 a % b = c ,  c取反 = -c
    
    
    					    -8 % -3 等价 8 % 3 结果取反
    					    -8 % -3 = -2
    					    8 % 3 = 2 结果取反为 -2
    
    优点一 更加直观不容易出错

    a 或者 b 一方为负数时

    按照模运算公式

    	模运算公式 a % b 等价 a - (b * (a / / b) )
    

    更为直观的判断

    无论是 -a % b 还是 a % -b 对我来说都是做和运算

    我的运算公式 a%b一方为负时:

    b恒取绝对值比a大的最小倍数值做和

    当 a < 0 , b > 0的时候结果恒为正
    a = -8
    b = 3
    -8 % 3 = 1
    等价 -8 + (3 * 3)“b取绝对值刚好比a大的倍数值”
    b=3 绝对值刚好比a大的是9 然后两者做和运算 -8 + 9 = 1

    					-16 % 12 = 8  等价-16 + 24	= 8
    					-27 % 13= 12 等价 -27 + 39 =12	
    

    当 a > 0 , b < 0的时候结果恒为负
    a = 8
    b = 3
    8 % -3 = -1
    等价 -8 + (3 * 3)“b取绝对值刚好比a大的倍数值”
    b=3 绝对值刚好比a大的是9 然后两者做和运算 8 + -9= -1

    					16 % -12 = -8 等价16 + -24 = -8
    					27 % -13 = -12 等价 27 + -39 = -12
    

    感谢您的阅读,如果能帮到你我和开心!

    展开全文
  • 今天小编就为大家分享一篇Python中的取模运算方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • Python 复数运算注意点

    千次阅读 2018-04-20 11:57:47
    print(1.23e-4+9.87e+6j.imag) 结果为 : 9870000.000123 也就是将1.23e-4+9.87e+6全部看作虚部 print(1.23e+4+9.87e+6j.imag) 结果:9882300.0 与上一个同理 print(1.23e+4+9.87e+6j....结果:5.0 也就是算复数的
    print(1.23e-4+9.87e+6j.imag)

    结果为 : 9870000.000123  也就是将1.23e-4+9.87e+6全部看作虚部

    print(1.23e+4+9.87e+6j.imag)

    结果:9882300.0  与上一个同理

    print(1.23e+4+9.87e+6j.real)

    结果:12300.0    将1.23e+4看作是实部(这个正常)

    z = 1.23e-4+9.87e+6j
    print(z.imag)
    print(z.real)

    结果:9870000.0
               0.000123        这种写法就会按正常的实部和虚部输出


    print(abs(3-4j))

    结果:5.0   也就是算复数的模


    展开全文
  • python中的%(运算

    千次阅读 2016-10-17 21:30:52
    模运算,用得算是比较多,但是负数的模运算还是用的比较少 -1 % 8 = 7 1 % -8 = -7 -1 % -8 = -1 1 % 8 = 1 从上述的例子可以看出,如果模运算的算术符符号相同,则直接等于取绝对值以后,再做模运算(负数则是负...
  • python-数字运算

    2018-12-07 11:01:14
    先贴出参考资料地址:...Python 数学运算常用的函数基本都在 math 模块、cmath 模块Python math 模块提供了许多对浮点数的数学运算函数。 Python cmath 模块包含了一些用于复数运算的函数。 cmath ...
  • python的算术运算-002

    2020-06-04 20:36:36
    1、python的算术运算,直接上代码例子: aa = 100 bb = 10 print(aa + bb) # 加法运算 print(aa - bb) # 减法运算 ...print(aa % bb) # 求模运算 print(aa // bb) # 整除运算 print(aa ** bb) # 求幂运算 ...
  • Python中的取模运算

    万次阅读 2017-08-06 16:52:27
    所谓取模运算,就是计算两个数相除之后的余数,符号是%。如a % b就是计算a除以b的余数。...当a和b存在负整数时,首先计算|a|%|b|=c,然后a%b的符号与b一致。也就是说,如果b>0,则a%b=c;如果b 比如:
  • python除法运算总结

    千次阅读 2016-11-29 13:51:44
    python除法运算包括:传统除法、精确除法、地板除法、求除法。 1、传统除法 如果是整数除法则执行地板除,如果是浮点数除法则执行精确除法。 [python] view plain copy >>>1/2...
  • python实现模逆运算

    千次阅读 2018-01-01 22:45:55
    模逆的定义:要定义这个运算,需要三个整数。a的模逆元素(对n取模)为b,意味着a*b mod m=1,则称a关于m的模逆为b Python实现:#定义一个函数,参数分别为a,n,返回值为b def findModReverse(a,m):#这个扩展欧几里得...
  • python 负数取模运算

    千次阅读 2019-05-29 15:52:25
    参考 举例: 340%60 = 40 ,怎么来的? 340 - 60*5 = 40 340 - (比340小的那个可以被60整除的正整数) =....如果是负数: -340%60 = -340 - (比-340小的那个可以被60整除的负整数) = -340 - (-360) = 20 ...
  • python的数值运算操作符 1.x+y x与y之和 2.x-y x与y之差 ...6.x%y x与y之商的余数,也称模运算 7.-x x的负值,即x(-1)* 8.+x x的本身 9.x**y x的y次幂,即x^y python的数值运算函数 abs(x) x的绝对值 div...
  • 图片源于:... python代码实现: def modExp(a, exp, mod): fx = 1 while exp > 0: if (exp & 1) == 1: fx = fx * a % mod a = (a * a) % mod exp = exp ...
  • 本文详细介绍了OpenCV-Python图像的加减乘除幂开方对数及位运算相关的函数及语法,并总结了相关函数的作用。OpenCV图像存储为矩阵,因此图像的运算其实就是矩阵的运算。图像的运算主要包括图像基础算术运算、图像...
  • 运算实现加减乘除四则运算python,位运算II) (一)加法 a+b=a^b+(a&b)<<1 加法的含义可以拆分为a^b安位取异或,即不同的位上进行相加;(a&b)<<1表示同位的1进行进一位。中间的加号可以...
  • 本节进入到Python具体的运算环节。既然是运算就需要有相应的运算符号,具体包括算术运算、关系运算、赋值运算、...表2-4介绍了在Python中相应的算术运算符号。 表2-4 Python中的算术运算符号 需要注意的是,在...
  • 摘要:本文主要介绍神经网络如何用python实现异或运算,有代码以及对代码相关函数功能的详细解释;以及其过程的详细说明;比较适合刚刚入门的学习者。
  • 矩阵运算: NumPy系统是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵(matrix)) import ...
  • Python脚本语言如何实现三维向量的加减,点乘,叉乘的运算呢? 本例子将给大家介绍在类调用函数的方法解决这个问题
  • python中numpy矩阵运算操作大全(非常全) //2019.07.10晚python矩阵运算大全1、矩阵的输出形式:对于任何一个矩阵,python输出的模板是:import numpy as np #引入numpy模块np1=np.array([[1,2,3],[1,3,4],[1,6,...
  • 今天小编就为大家分享一篇Python中的取模运算方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 所谓取模运算,就是计算两个数相除之后的余数,符号是%。如a % b就是计算a除以b的余数。用数学...
  • Python实现RSA加密算法 设p、q为质数 n = p*q fn = (p-1)*(q-1) 要满足: 1 < e < fn , 且 e 与 fn 互质 满足: e*d%fn = 1 (d>1) e 为公钥 , d 为私钥 把e 和 n 发给 客户端 m 为明文 c = m^e%n c 为...
  • import cmath#用于进行关于复数的运算,普通函数模块如math和numpy的数学函数无法进行关于复数的运算 #1.积分运算 #求不定积分 x=symbols('x')#将‘x’设置为未知数 integrate(cos(x),x)#解cos(x)不定积分 ...
  • Python入门之(2.4)Python数学运算

    千次阅读 2019-07-19 20:10:25
    目录 Python数学运算 ...Python的math模块包含高级运算中常见的三角函数、统计函数、对数函数等。 1.1分数 Python的模块fractions中定义了一个特殊的对象,叫做Fraction。该对象的属性包括分子...
  • python中是没有自增和自减的,因此在python中用 i = i + 1和 i = i -1 实现效果即可。 因为Python的模型规定,数值对象是不可改变的。 i = i + 1 相当于重新创建了一个变量 i ,而不是改变了 i 的数值。 举个...
  • python调教整数模运算、分数模运算以及乘法逆元运算!
  • # / 浮点除法 1/2 # 0.5 # // 整除 向下取整 等同于 math.floor() 1//2 # 0 -1//2 # -1 # % 取模运算 1%2 # 1 # divmod(a, b)取商和余数 = (a // b, a % b) divmod(1, 2) # (0, 1) ...
  • python 的数字类型和操作运算

    千次阅读 2018-05-09 23:08:23
    python中的整数可以为正,可以为负,范围可以想多大就多大 二进制数以0b或者0B开头 八进制数以0o或者0O开头 十六进制以0x或者0X开头 常用的pow(2,10)表示2的10次方 浮点数 相当于实数 1,浮点数的取值范围...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 74,318
精华内容 29,727
关键字:

python中模运算

python 订阅