得到两个巨大素数(质数)的乘积是简单的事,但想从该乘积分解出这两个巨大素数却是国际数学界公认的质因数分解难题。这种单向的数学关系,是不对称加密RSA算法的基本原理。 本题给出两个大素数(128bit位)的乘积和其中一个素数,请你编程求出另一个素数。
输入格式:
44022510695404470886511586569647292146578314354528108825807522926455663589709 (大素数的乘积)
189193782774204832019945226750213439577 (其中一个大素数)
输出格式:
232684764001698545563067004009755869717 (另一个素数)
输入样例:
608836658781298589359189583330915304207460546224057376306137776 84610994823161
271963475875372143777333694041058521413
输出样例:
223867067745633357281812540202957589797
分析:
要存储的数字为128bit 基本类型中 double 64bit long 64bit都不满足要求,使用BigDecimal 128bit 存储,精度比float double 要高。读取java.math.BigDecimal。的JDK源码发现