zoukankan      html  css  js  c++  java
  • 快速乘

    对于会溢出的乘法,除了__int128之外还有几个方法

    1.类似于快速幂的思想,只不过把加法换成乘法,

    快速幂:(res=Pi p^i*[a_i==1]),将连乘改成连加

    快速乘:(res=Sigma p^i*[a_i==1]),时间复杂度O(log)

    2.利用long double来在过程中替代long long

    再在接下来的计算中强制转换类型

    ll temp=(ld)x/MOD*y;
    ll res=(ull)x*y-(ull)z*MOD;
    

    注意,这个x/MOD*y的顺序很重要,保证不会溢出

    上面的式子实际上就是余数的定义式

    3.分配律

    ((a+b)*(c+d)equiv(ac+bd+ad+bc)(modp))

    合理的拆分可在O(1)时间内算出解,但是应用范围较局限

    可以考虑类似辛普森积分的方法递归拆分,但是还不如上面的优秀

    最好用的还是__int128了,只是编译环境不统一可能是个大坑

    ​ ——2020.5.3

  • 相关阅读:
    python_day_5:20180720
    python_day_4:20180719
    2018悦读
    2018生活
    心理画
    js 策略模式
    js 单例模式
    js 模板方法模式
    C语言-数据类型
    js 观察者模式
  • 原文地址:https://www.cnblogs.com/nebulyu/p/12821542.html
Copyright © 2011-2022 走看看