gpt4 book ai didi

Java BigInteger分解: division and multiplication differ

转载 作者:行者123 更新时间:2023-12-02 04:02:31 25 4
gpt4 key购买 nike

我正在编写一段代码,用 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

问题是:

  1. n mod temp4 不是 0,而是 245645763538854
  2. 事实1 * 事实2 * 事实3 * 事实4 与n 不同
  3. 但是 ((((N/事实 1)/事实 2)/事实 3)/事实 4) = 1

这是确切的输出:

0
0
0
245645763538854
1
8705702225074732565566202973257
8705702225074732811211966512111

这没有意义......第四个因素怎么可能同时是错误的和正确的?

最佳答案

很抱歉地报告:

8705702225074732811211966512111/(7*2777*14742873817) =30377199961175839.8571428571

它应该是一个整数。

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

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

它可以处理这些类型的数字

关于Java BigInteger分解: division and multiplication differ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34752530/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com