当前位置:首页 > C++知识 > 正文内容

取模运算总结——数论

亿万年的星光4年前 (2021-04-17)C++知识9193
  • 编程竞赛有相当一部分题目的结果过于庞大,整数类型无法存储,往往只要求输出取模的结果。

  • 例如(a+b)%p,若a+b的结果我们存储不了,再去取模,结果显然不对,我们为了防止溢出,可以先分别对a取模,b取模,再求和,输出的结果相同。


  • a mod b表示a除以b的余数。有下面的公式:

    • (a + b) % p = (a%p + b%p) %p

    • (a - b) % p = ((a%p - b%p) + p) %p

    • (a * b) % p = (a%p)*(b%p) %p


举例说明:

如果我们要计算下面公式:

(a1*a2*a3*...an)%p。我们给这个公式赋值(10*20*30)%6。先按照最原始的方法运算,10*20*30=6000,然后6000%6=0

如果我们用右边的公式计算,把10*20*30进行拆分。根据公式得 ((10%6)*(20%6)*(30*6))*6 。我们可以发现10%6=4,20%6=2,30%6=0。即时我不考虑最后一个数字,前面的乘积最大才是8。也就是说,我们通过这样的方法,可以将运算过程中的大数尽量避免掉。

扫描二维码推送至手机访问。

版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。

分享给朋友:

相关文章

2021CSP-J/S全国晋级二轮分数线公布

普及组CSP-J序号省市CSP-J人数CSP-J晋级晋级比例最高分晋级最低分1甘肃13413399.25%86152宁夏10310198.06%65243天津46345197.41%8615.54云南...

信息学奥赛中文件流的写法

信息学奥赛中文件流的写法

头文件#include<cstdio>也可以用万能头格式如下:int main(){ freopen("xxxx.in","r",st...

unsigned

在一些代码中,经常能看到unsigned这种数据类型,比如下面这样的。#include<iostream> using namespace std; int&nbs...

【数论】常见的距离度量方法

【数论】常见的距离度量方法

一、欧式距离欧式距离(Eucliden Metric,也是欧几里得度量)是一个通常采用的距离定义,旨在m维空间中两个点之间的真实距离,或者向量的自然长度(即该点到原点距离)。在二维和三维空间中的欧氏距...

如何估算时间复杂度

首先:  常见的算法时间复杂度由小到大依次为:Ο(1)<Ο(log2n)<Ο(n)<Ο(nlog2n)<Ο(n^2)<Ο(n^3)<…<Ο(2^n)<Ο(n!)时间复杂度可以简单理解为最多执...

【数据结构】并查集2

【数据结构】并查集2

上一篇文章,简单介绍了并查集。这篇文章,介绍一下并查集的改进以及优化。find函数的优化(路径压缩)因为并查集的merge操作:void merge(int a, int...