对于会溢出的乘法,除了__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
标签:__,res,ll,long,ull,快速,MOD 来源: https://www.cnblogs.com/nebulyu/p/12821542.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。