Java BigInteger分解:除法和乘法不同

时间:2016-01-12 19:47:06

标签: java biginteger bigint factorization

我正在编写一个代码来分解Java中的一个大数字(超过30位数)。

数字(n)是:8705702225074732811211966512111

代码似乎有效,结果如下:

  • 7
  • 2777
  • 14742873817

按逻辑,最后一项应该通过(n/(fact1 * fact2 * fact3))获得,结果是:

  • 30377199961175839

我对此感到非常高兴,但后来又决定采取一些测试:我将所有因素成倍增加,但期望找到...但是我没有!

这是我的支票代码:

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

问题是:

  1. n mod temp4不是0,而是245645763538854
  2. fact1 * fact2 * fact3 * fact4与n
  3. 不同
  4. 但是((((N / fact1)/ fact2)/ fact3)/ fact4)= 1
  5. 这是确切的输出:

    0
    0
    0
    245645763538854
    1
    8705702225074732565566202973257
    8705702225074732811211966512111
    

    这没有意义......第四个因素怎么可能同时出错?

3 个答案:

答案 0 :(得分:1)

很抱歉报告:

8705702225074732811211966512111 /(7 * 2777 * 14742873817)= 30377199961175839.8571428571

它应该是一个整数。

所以,你的因素分解是错误的......哎呀......

在linux下尝试bc,对于windows:http://gnuwin32.sourceforge.net/packages/bc.htm

它可以处理这些数字

答案 1 :(得分:1)

this page表示您的BigInteger的实际分解是 7 * 2777 * 2106124831 * 212640399728230879

答案 2 :(得分:0)

System.out.println(temp3.mod(temp1));

上面的代码给出了0,这意味着temp3不是素数。 temp4不是一个因素。