本篇是基于两篇较清晰的解析:为什么是1e9+7和1e9+7取模的易错点的总结

为什么是1e9+7?

1、1e9+7对int来说非常大,通常1e9代表无穷大

int数值的范围是-2147483648 到 2147483647,1e10已经超出范围了,所以在计算最小值的操作中,1e9常用来初始化代表无穷大。

2、对1e9+7取模的原因

在一些算法题目中,会遇到这样的情况:
由于结果可能较大,将结果mod 1e9+7,即mod 1000000007 。
或者

( a * b ) % c = [ ( a % c ) * ( b % c ) ] % c

而这个c最常见的还是1e9+7。
有时候结果比较大的时候,会对结果进行mod 1e9+7操作。为什么呢?
第一:
1e9+7是一个很大的数,int32位的最大值为2147483647,所以对于int32位来说1000000007足够大。int64位的最大值为2^63-1,对于1000000007来说它的平方不会在int64中溢出所以在大数相乘的时候,因为(a∗b)%c=((a%c)∗(b%c))%c,所以相乘时两边都对1000000007取模,再保存在int64里面不会溢出 ,否则两个非常大的数在ab阶段就溢出了。有点于归一化的意思。
当一个问题只对答案的正确性有要求,而不在乎答案的数值,可能会需要将取值很大的数通过求余变小。
第二:
其次,1e9+7是一个质数,在模素数p的情况下a
n(a非p的倍数)的循环节长为p,这是减少冲突的一个原因。另一方面模素数p的环是无零因子环,也就是说两个非p倍数的数相乘再模p不会是零(如果是0的话,在多个数连乘的情况下会大大增加冲突概率)。比如说如果所有的结果都是偶数…你模6就只可能出现0, 2, 4这三种情况…但模5还是可以出现2, 4, 1, 3这四(4=5-1)种情况的… hash表如果是用取模的方法也要模一个大质数来减少冲突,出题人也会这样来 希望减少你“蒙对“的概率。

易错总结

1、用max比较很大数据时,不能先取模

取mod的时候,如果题目要求你算最大值,并且说由于答案可能很大,输出结果请对1e9+7取,那你千万不能在max函数更新最大值时就取模,这样很可能会出错。

比如:题目过程中有四个数据

2e9+7,1e9+6,1e9+5,1e9+4

然后算法中你用max求最大值时,如果先模上1e9+7,那你会得到1e9,1e9+6,1e9+5,1e9+4,并且max函数算出的最大值是1e9+6,可是这四个数的最大值应该是2e9 + 7才对

正确做法:在求max的时候不要先取mod,而是都以long long型数据比大小,最后得到最大值是2e9 + 7,再对它取mod,得到结果是1e9 + 7

2、(a∗b)%c 应该变化为((a%c)∗(b%c))%c,c一般为1e9+7

如果a和b都是非常大的数的话(a∗b)%c 操作还没轮到对c取模就爆了

3、取模加括号

(1)、注意顺序
下面的式子取模过程有个坑点:

res = res % mod + pre[i][j] % mod * a[i][j] % mod;

这行式子里面 * 和 % 是从左到右计算的,所以其实pre[i][j]取模后先与a[i][j]相乘了,a[i][j]并没有取模
应该为:

res = res % mod + pre[i][j] % mod * (a[i][j] % mod);

(2)、注意为(1e9+7)
1e9+7记得加括号

为什么对1e9+7取模相关推荐

  1. 【C++ 取模mod易错点】由于答案可能会很大,请你将结果对1e9+7取模后再返回

    在做算法题时我们经常会遇到这样一句话: 由于答案可能会很大,请你将结果对10^9 + 7取模后再返回 附:为什么很多程序竞赛题目都要求答案对 1e9+7 取模? 1000000007是一个质数 int ...

  2. 求2的n次方对1e9+7的模,n大约为10的100000次方(费马小定理)

    昨天做了一个题,简化题意后就是求2的n次方对1e9+7的模,其中1<=n<=10100000.这个就算用快速幂加大数也会超时,查了之后才知道这类题是对费马小定理的考察. 费马小定理:假如p ...

  3. acm新手小白必看系列之(7)——快速幂取模精讲及例题

    acm新手小白必看系列之(7)--快速幂取模精讲及例题 性质1:(a+b)%m=(a%m+b%m)%m 性质2:(ab)%m=(a%mb%m)%m 给你一个数a,让你求其b次连乘后的结果 当b很小时, ...

  4. 3-为什么很多 对 1e9+7(100000007)取模

    首先有很多题目的答案是很大的,然而出题人的本意也不是让选手写高精度或者Java,所以势必要让答案落在整型的范围内.那么怎么做到这一点呢,对一个很大的质数取模即可(自行思考为什么不是小数).那么如果您学 ...

  5. Duplicate Strings 字符串 取模 牛客练习赛95

    链接:https://ac.nowcoder.com/acm/contest/11185/A 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言52 ...

  6. 牛客练习赛75 D 减数游戏(队列优化(需要取模的)堆)

    牛客练习赛75 D 减数游戏 思路:写一下式子可以发每次选择最小的两个数进行操作,最后得到的答案会是最大的,那我们可以将它放进一个最小堆中来维护,但是里面的数是需要取模的,当它取模的时候,将会变小.那 ...

  7. 牛客 Celestial Resort 质因数分解求最小公倍数 除法取模

    题目描述 Madeline来到了Celeste山的天空度假山庄(Celestial Resort).工作人员Oshiro先生希望Madeline住在这里,而这里却因为早就没有客人来光顾而脏乱不堪. 虽 ...

  8. 牛客小白月赛24J--多项式取模

    链接:题目传送门 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 牛牛国有 ...

  9. Chino with Equation (隔板法+除法取模)

    链接: https://ac.nowcoder.com/acm/contest/553/D Chino的数学很差,因此Cocoa非常担心.今天,Cocoa要教Chino解不定方程. 众所周知,不定方程 ...

最新文章

  1. mybatis10--自连接多对一查询
  2. 大话Django之一:安装与启动
  3. Java Web之文件的上传及下载
  4. 【Python】一行python代码利用人工智能去除工作照背景
  5. windows 客户端的Navicat PL/SQL 连接Oracle 数据库
  6. RPi 树莓派 DSI 接口研究 MIPI raspberry pi
  7. 微信小程序前后端配合的支付代码
  8. mongodb哪些情况适用内嵌,哪些情况适用引用
  9. 无法解析的外部符号+_mysql_fetch_row_vs连接mysql出现以下错误,求解答,谢谢,不胜感激...
  10. Codeweavers的丰田模式
  11. 如何在虚拟机安装并使用NTFS for Mac 15
  12. 【转】git使用教程
  13. python abs的功能_Python Pandas DataFrame.abs()用法及代码示例
  14. 第一回 钟碧诚 被迫上屋顶
  15. python实用例子_Python实用案例 - 随笔分类 - 一入测试深似海 - 博客园
  16. Android 小组件完整案例
  17. 这10个比较好用的服务器管理软件你都知道吗?
  18. 拼多多店铺昨天还好好的,今天突然没流量,怎么回事?
  19. JAVA中list根据某个字段排序
  20. MATLAB——新建、删除或移动文件夹

热门文章

  1. mysql压缩包安装的密码忘了怎么办_数据库mysql 8.0.18 压缩包安装及忘记密码重置所遇到的坑...
  2. 钉钉内网穿透工具——简单、快速、高效(钉钉于2022年7月21日起,不再提供内网穿透的工具服务)
  3. C罗和梅西谁在西甲和欧冠中表现更佳?
  4. 图解电动汽车:电动汽车电驱系统
  5. MSP432E401Y学习笔记1
  6. 解决输入法遮挡--ios手机
  7. 计算机毕设 SSM校园二手商品交易平台 校园二手市场交易平台 二手物品置换平台Java
  8. 压缩感知之OMP算法及DFT
  9. ROS_Kinetic_22 使用ROS的qt插件即ros_qtc_plugin实现Hi ROS!!!!
  10. python实现两个excel数据匹配,最终写入新的excel文件