我正在编写代码以分解Java中的大量数字(超过30位)。
数字(n)是这样的:8705702225074732811211966512111
该代码似乎可以正常工作,结果是:7
2777
14742873817
按照逻辑,最后一项应该可以通过执行(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
最后,我检查事实1 *事实2 *事实3 *事实4 = n
问题是:
n mod temp4不是0,而是245645763538854
fact1 * fact2 * fact3 * fact4与n不同
但是(((((N / fact1)/ fact2)/ fact3)/ fact4)= 1
这是确切的输出:
0
0
0
245645763538854
1
8705702225074732565566202973257
8705702225074732811211966512111
这是没有道理的。。。。。。。。。。。
最佳答案
System.out.println(temp3.mod(temp1));
上面的代码给出0,这意味着temp3不是素数。 temp4不是一个因素。