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

取模运算总结——数论

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

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

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

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

分享给朋友:

相关文章

C++中的溢出

一、编程中的溢出   溢出是C++语言中最常见的漏洞。最常见的溢出包括数组溢出、数溢出、缓冲区溢出、指针溢出以及栈溢出。二、数组溢出    ...

STL入门——容器2:set

一、简单介绍    set是STL中一个很有用的容器,用来存储同一种数据类型的数据结构(可以称之为K的模型),基本功能与数组相似。set与数组不同的是,在set...

C++中的宏

一、预处理和编译器    首先,预编译器就是在编译器之前运行,换句话说,预编译器根据程序员的指示,决定实际要编译的内容。预编译器编译指令都以 # 开头。例如:1...

STL入门——简单介绍

一、STL是什么?    STL(Standard Template Library)即标准模板库,是一个具有工业强度的,高效的C++程序库。它被容纳于C++标准程序库(C++ S...

【题解】士兵训练

【题目描述】某部队进行新兵队列训练,将新兵从一开始按顺序依次编号,并排成一行横队,训练的规则如下:从头开始一至二报数,凡报到二的出列,剩下的向小序号方向靠拢,再从头开始进行一至三报数,凡报到三的出列,...

【STL】二分查找函数(算法)—binary_search

【说明】binary_search() 实现了一个二分查找算法。它会在前两个参数指定范围内搜索等同于第三个参数的元素。指定范围的迭代器必须是正向迭代器而且元素必须可以使用 < 运算符来比较。这个...