【发布时间】:2016-04-17 14:11:51
【问题描述】:
我正在编写代码以在 Java 中分解一个大数字(超过 30 位)。
数字 (n) 是这样的:8705702225074732811211966512111
代码似乎可以工作,结果是:
7277714742873817
按照逻辑,最后一项应该可以通过 (n/(fact1 * fact2 * fact3)) 获得,结果是:
30377199961175839
对此我非常满意,但随后决定进行一个小测试:我乘以所有期望找到 n 的因子...但我没有!
这是我的校验码:
BigInteger n = new BigInteger("8705702225074732811211966512111");
BigInteger temp1 = new BigInteger("7");
BigInteger temp2 = new BigInteger("2777");
BigInteger temp3 = new BigInteger("14742873817");
BigInteger temp4 = n.divide(temp1).divide(temp2).divide(temp3);
System.out.println(n.mod(temp1));
System.out.println(n.mod(temp2));
System.out.println(n.mod(temp3));
System.out.println(n.mod(temp4));
System.out.println(n.divide(temp1).divide(temp2).divide(temp3).divide(temp4));
System.out.println(temp1.multiply(temp2).multiply(temp3).multiply(temp4));
System.out.println(n);
如您所见,我只是定义了数字 n 和因子(最后一个定义为 n/(fact1 * fact2 * fact3) 然后检查 n/eachfactor 是否给出余数 0。
然后我检查 ((((N / (fact1)) / fact2) / fact3) / fact4) = 1
最后我检查了 fact1 * fact2 * fact3 * fact4 = n
问题是:
- n mod temp4 不是 0,而是 245645763538854
- fact1 * fact2 * fact3 * fact4 与 n 不同
- 但是 ((((N / fact1) / fact2) / fact3) / fact4) = 1
这是确切的输出:
0
0
0
245645763538854
1
8705702225074732565566202973257
8705702225074732811211966512111
这没有意义……第四个因素怎么可能同时是对的?
【问题讨论】:
-
你的第三个因素
14742873817不是素数;这是7 * 2106124831。 -
我现在注意到了!还是谢谢你!
-
记住
BigInteger.divide向下舍入。这可能导致((((N / (fact1)) / fact2) / fact3) / fact4) = 1没有实际除N的所有因素。 -
如何将其标记为已解决?
标签: java biginteger bigint factorization