
C++取余数问题
a*b%m(a<m&&b<m)但是a*b越界怎么才能算a*b%m的正确值a和b已经是longlong...
a*b%m (a<m&&b<m)
但是a*b越界 怎么才能算a*b%m的正确值 a和b已经是long long 展开
但是a*b越界 怎么才能算a*b%m的正确值 a和b已经是long long 展开
1个回答
展开全部
取余运算的规则
(a*b)%m === ((a%m) * (b%m))%m
加减乘都适用于这个公式
(a*b)%m === ((a%m) * (b%m))%m
加减乘都适用于这个公式
更多追问追答
追问
这个不行的吧 已经给了(a<m&&b<m)的条件 但是a*b会大于long long的最大值 请问有什么办法可以快速的算 (a*b)%m
追答
你可以模拟大整数运算,将a和b砍成两半,两半32位(假设你long long是64位)
a = A1*2^32 + A2
b = B1*2^32 + B2
a * b = (A1*2^32 + A2) * (B1*2^32 + B2)
然后就按照上面我说的公式去套吧
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |