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

取模运算总结——数论

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

  • 例如(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。也就是说,我们通过这样的方法,可以将运算过程中的大数尽量避免掉。

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

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

分享给朋友:

相关文章

最小生成树(1)

最小生成树(1)

一、定义一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边。最小生成树可以用kruskal(克鲁斯卡尔)算法或prim(普里姆)算法求出...

指针(三):指针与函数

1.交换的例子#include<iostream> #include<cstdio> #include<cstring> using namespa...

C++读取磁盘文件

0.前言简单介绍一下C++读取文件的基本操作。关键技术:freopen() 文件的打开函数 FILE *fp fp=fopen(文件名,使用文件方式) 例如: fp...

【题解】均分纸牌

【题目描述】有n堆纸牌,编号分别为 1,2,…, n。每堆上有若干张,但纸牌总数必为n的倍数。可以在任一堆上取若干张纸牌,然后移动。移牌规则为:在编号为1的堆上取的纸牌,只能移到编号为 2 的堆上;在...

【数论】组合数学—容斥原理

【数论】组合数学—容斥原理

概念在计数时,必须注意没有重复,没有遗漏。为了使重叠部分不被重复计算,人们研究出一种新的计数方法,这种方法的基本思想是:先不考虑重叠的情况,把包含于某内容中的所有对象的数目先计算出来,然后再把计数时重...

【算法】前缀和与差分(3)二维数组前缀和

【算法】前缀和与差分(3)二维数组前缀和

0.前言前面的一篇文章,介绍了一维数组的前缀和,这篇文章中,介绍一下二维数组的前缀和1.定义二维数组的前缀和就是按照二维数组求和。公式如下:那二维前缀和中一个f[i][j]表示的意思就是以(1,1)为...