力扣 青蛙跳台阶为什么取模 1000000007(评论区复制的)

大数相乘,大数的排列组合等为什么要取模

1000000007是一个质数(素数),对质数取余能最大程度避免结果冲突/重复
int32位的最大值为2147483647,所以对于int32位来说1000000007足够大。
int64位的最大值为2^63-1,用最大值模1000000007的结果求平方,不会在int64中溢出。
所以在大数相乘问题中,因为(a∗b)%c=((a%c)∗(b%c))%c,所以相乘时两边都对1000000007取模,再保存在int64里面不会溢出。

这道题为什么要取模,取模前后的值不就变了吗?

确实:取模前 f(43) = 701408733, f(44) = 1134903170, f(45) = 1836311903, 但是 f(46) > 2147483647结果就溢出了。

_____,取模后 f(43) = 701408733, f(44) = 134903163 , f(45) = 836311896, f(46) = 971215059没有溢出。

取模之后能够计算更多的情况,如 f(46)

这道题的测试答案与取模后的结果一致。

总结一下,这道题要模1000000007的根本原因是标准答案模了1000000007。不过大数情况下为了防止溢出,模1000000007是通用做法,原因见第一点。

关于为什么要取素数作为模
可以参考:https://flat2010.github.io/2018/04/19/%E6%A8%A1%E8%BF%90%E7%AE%97%E4%B8%AD%E4%B8%BA%E4%BD%95%E8%A6%81%E7%94%A8%E7%B4%A0%E6%95%B0%E4%BD%9C%E4%B8%BA%E6%A8%A1/

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: "力扣的执行出错" 是指在使用力扣 (LeetCode) 进行编程时, 代码的执行过程中出现了错误。这可能是因为代码本身存在语法错误或逻辑错误, 也可能是因为输入数据不符合题目要求, 或者其他原因导致的。如果你在使用力扣时遇到了执行出错的问题, 建议你仔细检查你的代码, 确保代码的正确性, 并且确保输入数据符合题目的要求。 ### 回答2: 力扣的执行出错是指在力扣平台上运行代码时遇到了错误。出错可能有多种原因,比如代码逻辑错误、算法错误、语法错误等等。当代码运行出错时,力扣会给出相应的错误提示信息,帮助开发者找出问题所在,并进行修复。 执行出错可能会导致代码无法正常运行或产生错误的输出结果。在力扣平台上,出错会以红色的错误提示信息显示,开发者可以根据提示信息了解出错的具体原因,并针对性地修改代码。 对于力扣的参赛者来说,执行出错可能会影响他们的得分和排名。在某些比赛中,如果程序执行出错,得分将会受到一定的扣分。因此,及时发现和解决执行出错问题是很重要的。 对于编程学习者来说,执行出错是一种很常见的情况。通过分析和解决执行出错问题,可以帮助学习者提高编程能力和调试技巧,逐渐掌握解决问题的能力。 总之,力扣的执行出错表示代码在运行过程中出现了错误。解决执行出错问题需要开发者仔细分析错误信息,并针对性地进行代码修改和调试。通过不断积累经验和学习,可以逐渐减少和避免执行出错的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值