c++ 快速乘

First

在一些数学题中,两个数相乘运算很多,同时又很容易溢出,如两个 long long 相乘
今天本蒟蒻来总结一下快速乘的两种方法

1:二进制

和快速幂的原理一样,优化一个一个加的算法,复杂度\(O(\log n)\)
适用于一般场合,慢但是稳定

typedef long long LL;
inline LL Mul(LL x,LL y,LL p){
	register LL res=0;
	for(;y;y>>=1,x=(x+x)%p)
	if(y&1)res=(res+x)%p;
	return res;
}

2:运用 Long Double

原理:\(a\times b\mod p=a\times b-\lfloor\dfrac{a\times b}{p}\rfloor\times p\)
就是利用long double处理\(\lfloor\dfrac{a\times b}{p}\rfloor\),复杂度\(O(1)\)
适用于需要卡常数的题目,但是long double有精度问题,若数据太大容易出锅

typedef long long LL;
typedef long double LD;
inline LL Mul(LL x,LL y,LL p) {
    return (x*y-(LL)((LD)x/p*y)*p+p)%p;
}
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 学习 Java 需要付出努力和耐心,但是有一些方法可以帮助你加快学习进度。首先,应该多看一些教程和实例,以便更好地理解 Java 的基本概念。其次,可以尝试编写一些简单的程序,以便更好地掌握 Java 的语法和语义。此外,你还可以参加一些在线课程或研讨会,以便从专家那里获取更多的建议和技巧。 ### 回答2: 学习Java有一些方法和技巧可以帮助你快速掌握它。 首先,建议你选择一个好的学习资源。有很多优秀的教材和在线课程可以帮助你系统地学习Java。你可以选择一本权威的Java教材,或者在网上找一些针对初学者的视频教程。确保选择的资源内容可靠且易于理解。 其次,进行练习和实践非常重要。Java是一门编程语言,理论知识肯定很重要,但实践才是真正的老师。在学习过程中,尽量多做一些编程实践,例如编写小程序、解决一些算法问题或者完成一些小项目。这样可以加深对Java知识的理解和记忆,并提高编程能力。 另外,参加Java编程社区和论坛也是不错的选择。在这些社区和论坛上,你可以向其他有经验的Java开发者提问并寻求指导。还可以阅读一些Java编程相关的博客和文章,了解一些实际应用的经验和技巧。 最后,保持持续的学习和进步。学习Java不是一蹴而就的过程,需要持续不断地学习和实践。定期回顾之前学过的知识,与其他学习者交流经验,关注Java的最新发展和趋势。只有持续学习和进步,才能真正掌握Java。 总之,学习Java需要一定的时间和努力,但通过选择合适的学习资源、进行实践和练习、参与社区和保持持续学习,你可以更快地学成Java。 ### 回答3: 学习Java的关键是掌握基本的编程概念和语法规则,然后通过实践和项目经验不断提升自己的编程能力。以下是一些帮助您快速学成Java的方法: 1. 学习基础知识:开始学习Java之前,建议先学习一些基本的计算机概念和编程基础知识,比如数据类型、变量、运算符、控制流程等。可以通过在线教程、视频教程或参考书籍来学习。 2. 实践编程:理论只是基础,只有通过实践才能加深理解和提高技能。尝试编写简单的Java程序来练习,并逐步增加程序的复杂性和功能。可以使用集成开发环境(IDE)来编写和调试程序。 3. 参考示例代码:在学习过程中,可以查阅一些优秀的示例代码,了解常见的编程模式和最佳实践。这些示例代码可以帮助您更好地理解和运用Java的特性和库函数。 4. 解决问题:通过解决实际问题和挑战来巩固所学的知识。参与开源项目或编程竞赛等活动可以加速学习进程,并提供更多实战经验。 5. 学习工具和框架:掌握一些常用的Java开发工具和框架,如Maven、Spring等。这些工具和框架可以帮助您更高效地进行开发,并了解行业中的现代编程实践。 6. 参与社区交流:Java拥有一个庞大的开发者社区,参与其中可以获取更多的学习资源和经验分享。可以加入一些Java相关的论坛、社交平台或参加线下活动,与其他开发者交流并学习他们的经验。 7. 持续学习和更新知识:Java是一个不断演进的编程语言,新的特性和库函数不断出现。要保持学习的热情,并随时更新自己的知识,以适应行业的变化。 总的来说,学习Java需要不断的实践和总结经验。尽管学会Java需要一定的时间和努力,但通过合理的学习方法和坚持不懈,您可以在相对较短的时间内快速掌握Java编程技能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值