首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

执行模运算的其他方法

执行模运算的其他方法:

模运算(Modulo operation)是一种数学运算,用于计算两个数相除后的余数。在编程中,模运算通常用于循环、遍历数组、列表等数据结构,以及实现一些算法。

除了使用编程语言内置的模运算符(如%、mod等),还可以使用其他方法来实现模运算,例如:

  1. 位运算法:
代码语言:txt
复制
a mod b = a & (b - 1)

其中,a和b都是正整数,且b是2的幂次方。

  1. 减法法:
代码语言:txt
复制
a mod b = ((a % b) + b) % b

其中,a和b都是整数。

  1. 乘法法:
代码语言:txt
复制
a mod b = (a * b_inv) % b

其中,a和b都是整数,b_inv是a的乘法逆元,满足:

代码语言:txt
复制
a * b_inv % b = 1
  1. 除法法:
代码语言:txt
复制
a mod b = a - (a // b) * b

其中,a和b都是整数。

以上方法在不同场景下可能有不同的适用性,具体使用哪种方法需要根据实际需求进行选择。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Python中运算

所谓取运算,就是计算两个数相除之后余数,符号是%。如a % b就是计算a除以b余数。...实际上,虽然结果不一样,不过取运算完全遵从统一规则: a \% b = a- \lfloor\frac{a}{b}\rfloor * b 其中\lfloor\frac{a}{b}\rfloor表示...不过人脑不比电脑,这样计算未免太复杂,为避免给大脑增加负担,再根据上面的规则,这里我总结了一个简单记忆方法: 对于不带负号,2个数字都是正数,直接求结果,这个应该来说是比较简单,而且无论符号是什么...,我们都只计算这个值; 对于有负号,不管负号在哪个数字,都去除负号,然后计算步骤1结果; 接下来根据负号位置分为3种情况,假设除数是K,去掉负号后取结果是M: 2个数都是负数,直接等于-M 被除数是负数...,除数是正数,由于是向下舍入,最后相当于会多加上一个K,也就是说一定是大于0,结果是K-M 被除数是正数,除数是负数,刚好相反,结果是M-K,注意这里K是除数绝对值,是正数 简单归纳: 不管有没有负数

1.4K30

快速幂大数运算_快速幂

大家好,又见面了,我是你们朋友全栈君。 快速幂运算 1.什么是快速幂 2.快速幂“小数”运算 3.高精度(大数)快速幂 1.什么是快速幂 快速幂,是指在进行幂运算时候,用一种快速方法得出答案。...2.快速幂“小数”运算 对于系统内置类型整型,暂且叫他“小数”,这个时候进行快速幂运算,代码如下: #include #include #include using namespace std; const long long int mod = 1000000000007; //对答案取 int main() { long long int...取最终值是:", n); while (n > 0) //快速幂模板 { if (n%2 == 1) ans = (ans%mod * temp%mod) % mod; n /= 2; temp...用一张图来表示 3.高精度(大数)快速幂 上面的代码发现当n值稍微大一点就不行了,但是用高精度运算就不要有这种限制。

78920

Java 取余 (remain),取 (mod) 区别和运算

大家好,又见面了,我是你们朋友全栈君。 范围区别:取主要是用于计算机术语中。取余则更多是数学概念。 主要区别在于对负整数进行除法运算时操作不同 那么具体是怎样不同?...首先需要知道Java中如何取: 取余,遵循尽可能让商大原则 —–取余:尽可能让商绝对值更小 —–如-9rem2,-9/2=-4.5,取商为-4,。...余数为-9-(2*-4)=-1 取,遵循尽可能让商小原则 —–取:“向下”意思就是说尽可能让商更小 —–如-9mod2,-9/2=-4.5,取商为-5。...余数为-9-(2*-5)=1 为了方便记忆: a ÷ b = c ··· r a,b 同号 时(a,b>0 || a,b<0),取取余相同都为r 当a,b 异号时,为 (r + b) ,余为...r 注意:在C/C++, C#, JAVA, PHP这几门主流语言中,’%’运算符都是做取余运算,而在 python中’%’是做取运算

1.7K20

挑战程序竞赛系列(38):4.1运算世界(1)

https://blog.csdn.net/u014688145/article/details/77679432 挑战程序竞赛系列(38):4.1运算世界(1) 详细代码可以fork...练习题如下: POJ 1150: The Last Non-zero Digit POJ 1150: The Last Non-zero Digit 总算刷到了登峰造极,看了一些关于运算相关知识,但还是云里雾里...在一个序列中: 1 2 3 4 5 6 7 8 9 10 因数2个数永远大于因数5个数 所以说,我们只需要求出多出来2个数即可,这些将会影响非零位数最终结果。...观察发现它包含有5奇数倍项,但这奇数倍均除以5得到1,3,5,7.... 所以变成了前部部分子问题了......所以问题关键就变成了求解1,3,7,9各自个数了 其实都不需要求,直接看出来了 当n = 10,1:1, 3:1, 7:1, 9:1 当n = 13?

30230

挑战程序竞赛系列(39):4.1运算世界(2)

https://blog.csdn.net/u014688145/article/details/77684806 挑战程序竞赛系列(39):4.1运算世界(2) 详细代码可以fork...练习题如下: POJ 1284: Primitive Roots POJ 1284: Primitive Roots 欧拉函数这东西我只知道一个定义: 欧拉函数值等于不超过m并且和m互素个数。...首先,如果m是素数,可以直接得到ϕ(m)=m−1\phi(m) = m - 1,进一步得,mkm^k欧拉值为ϕ(mk)=mk−mk−1\phi(m^k) = m^k - m^{k - 1},令p =...此题,则用到了《初等》P249,定理9.5 定理:如果p有原根,则它恰有φ(φ(p))个不同原根(无论p是否为素数都适用) p为素数,当然φ(p)=p-1,因此就有φ(p-1)个原根 欧拉函数实现参考

26450

【C语言简单说】六:取运算符以及变量扩展

┴┴ (╰(`□′)╯( ┴┴ … 这一节我们就来说另外运算符——取运算符(说白了跟取余数差不多…<—_-)!!!) 先看看好难懂定义:取运算和取余运算两个概念有重叠部分但又不完全一致。...…(后面太罗嗦就不复制了) 取也是一种运算,叫做取运算…(貌似有点废话<—_-)!!!)...c=b%a; printf("b取a 值是%d;\n",c); system("pause"); } 我们看c=b%a 就是取运算,把运算结果给...取运算其实就是,我们姑且就当作取余数。我们看代码我们b是5,a是1,那么取运算结果等于1,那是因为5除2余1…好了就是那么简单。反正我数学不好=。...可能大家都会说可能会出现之前那种情况,输出一堆乱乱东西。 还有一件事情就是要说明,如果b值给了a,b值还是会继续存在,只是复制了一份去a变量而已。

98210

运算方法,小结

本文是针对使用位运算来实现一些方法,我们都知道位运算代价比其他符号运算都低,所以当一个方法只使用位运算运算次数与其他不纯使用位运算方法相等时,所用时间肯定是最短,甚至即使运算次数比其他 方法多...这里计算算法衡量标准是位运算运算此时,任何C运算符当作一次运算,不写到RAM中间赋值不算运算,当然这里假设每次运算代价都是近似相同机器指令和CPU时间。...当然制定一个衡量标准来判断一个方法是否比另外一个方法快,这样是最好解决方案, 这里衡量标准就是运算次数。...-(unsigned)v : v 即使这个方法运算次数与上面的是一样,这个速度还是慢。...) & 1; 上面的方法用了9次运算,对32位数适用。

718130

运算方法,大结

在计算机中所有数据都是以二进制形式储存。位运算其实就是直接对在内存中二进制数据进行操作,因此处理数据速度非常快。...位操作基础 基本位操作符有与、或、异或、取反、左移、右移这6种,它们运算规则如下所示: 符号 描述 运算规则                        by MoreWindows & 与 两个位都为...位操作符运算优先级比较低,因为尽量使用括号来确保运算顺序,否则很可能会得到莫明其妙结果。比如要得到像1,3,5,9这些2^i+1数字。...写成int a = 1 << i + 1;是不对,程序会先执行i + 1,再执行左移操作。应该写成int a = (1 << i) + 1; 5. ...)》  地址:http://blog.csdn.net/morewindows/article/details/8214003 位操作是一种高效优美的方法,同时由于其高效运算性能和掌握难度较大,位操作运算一直是笔试面试时热门话题之一

1.4K80

Java 方法运算

设计方法原则: 方法本意是功能块,就是实现某个功能语句块集合。我们设计方法时候,最好保持方法原子性,就是一个方法只完成 1 个功能,这样利于我们后期扩展。...实参:调用方法时实际传给方法数据。 返回值:方法执行完毕后返还给调用它环境数据。 返回值类型:事先约定返回值数据类型,如无返回值,必须给出返回值类型void。...浮点运算: 如果两个操作数有一个为double, 则结果为double. 只有两个操作数都是float, 则结果才为float. 取运算 其操作数可以为浮点数,一般使用整数。...如:5.9%3.9=2.000000004 注:一般都是正整数运算! 一元运算符(++, --) int a = 3; int b = a++; //执行完后,b=3。先给b赋值,再自增。...int c = ++a; //执行完后,c=5。先自增,再给b赋值 注:java中乘幂处理: int a = 3^2; //java中不能这么处理, ^是异或符号。

75620
领券