Java BigInteger 分解:除法和乘法不同
Java BigInteger factorization: division and multiplication differ
我正在编写一个代码来分解 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
最后我检查了 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
这没有意义...第四个因素怎么可能同时是错误的和正确的?
System.out.println(temp3.mod(temp1));
以上代码给出0,表示temp3不是素数。 temp4 不是一个因素。
很遗憾地报告:
8705702225074732811211966512111/(7*2777*14742873817) =
30377199961175839.8571428571
这里应该是一个整数。
所以,你的因式分解是错误的...哎呀..
在 linux 下尝试 bc,对于 windows:http://gnuwin32.sourceforge.net/packages/bc.htm。
它可以处理这些数字
this page 表示您的 BigInteger 的实际因式分解是 7*2777*2106124831*212640399728230879
我正在编写一个代码来分解 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
最后我检查了 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
这没有意义...第四个因素怎么可能同时是错误的和正确的?
System.out.println(temp3.mod(temp1));
以上代码给出0,表示temp3不是素数。 temp4 不是一个因素。
很遗憾地报告:
8705702225074732811211966512111/(7*2777*14742873817) = 30377199961175839.8571428571
这里应该是一个整数。
所以,你的因式分解是错误的...哎呀..
在 linux 下尝试 bc,对于 windows:http://gnuwin32.sourceforge.net/packages/bc.htm。
它可以处理这些数字
this page 表示您的 BigInteger 的实际因式分解是 7*2777*2106124831*212640399728230879