• 为什么要模1000000007


    先看一下常用数据类型的数值范围(32位系统)
    字节 类型 范围 长度

    字节 类型 范围 长度
    一字节(2^8) char -128 ~ 127 3
    一字节(2^8) unsigned char 0 ~ 255 3
    二字节(2^16) short -32768 ~ 32767 5
    二字节(2^16) unsigned short 0 ~ 65535 5
    四字节(2^32) unsigned int 0~4294967295 10
    四字节(2^32) int -2147483648~2147483647 10
    四字节(2^32) unsigned long 0~4294967295 10
    四字节(2^32) long -2147483648~2147483647 10
    八字节(2^64) long long (g++) -9223372036854775808~9223372036854775807 19
    八字节(2^64) unsigned long long (g++) 0~18446744073709551615 20
    八字节(2^64) __int64 (msvc) -9223372036854775808~9223372036854775807 19
    八字节(2^64) unsigned __int64 (msvc) 0~18446744073709551615 20

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

    确实:取模前 f(43) = 701408733, f(44) = 1134903170, f(45) = 1836311903, 但是 f(46) > 2147483647结果就溢出了。
    对齐,取模后 f(43) = 701408733, f(44) = 134903163 , f(45) = 836311896, f(46) = 971215059没有溢出。

    大数

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

  • 相关阅读:
    如何让nodejs使用多线程执行
    web input光标的颜色
    web视频自定义规划
    webgl 学习注意事项
    前端url创建,以及base64与url的转化
    微信 input 照相机 呼出
    js 资源下载方法
    在React项目中使用React-intl实现多语言支持,以及对react-init各组件的解读
    React Native 的组件定义及使用
    AMD模块&CommonJs模块&ES6模块
  • 原文地址:https://www.cnblogs.com/jason0529/p/13915062.html
Copyright © 2020-2023  润新知