java--两个巨大素数(质数)的乘积

本博客探讨了如何处理两个128位大素数的乘积,并重点介绍了在Java中存储和操作此类大数的方法。内容涉及到质因数分解的挑战,以及在处理大数乘积时为何双精度浮点数和长整型不足,推荐使用BigDecimal。还提到了BigDecimal的divide方法中参数的意义和使用注意事项,以避免非终止小数导致的ArithmeticException。
摘要由CSDN通过智能技术生成

得到两个巨大素数(质数)的乘积是简单的事,但想从该乘积分解出这两个巨大素数却是国际数学界公认的质因数分解难题。这种单向的数学关系,是不对称加密RSA算法的基本原理。 本题给出两个大素数(128bit位)的乘积和其中一个素数,请你编程求出另一个素数。

输入格式:

44022510695404470886511586569647292146578314354528108825807522926455663589709 (大素数的乘积) 	
189193782774204832019945226750213439577 (其中一个大素数)

输出格式:

232684764001698545563067004009755869717 (另一个素数)

输入样例:

608836658781298589359189583330915304207460546224057376306137776	84610994823161
271963475875372143777333694041058521413

输出样例:

223867067745633357281812540202957589797

分析

要存储的数字为128bit 基本类型中 double 64bit long 64bit都不满足要求,使用BigDecimal 128bit 存储,精度比float double 要高。读取java.math.BigDecimal。的JDK源码发现


                
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值