化简平方根

Alb*_*ssi 5 java

假设我要计算 8 的平方根。有两种方法可以显示结果,如下所示:

\n\n

在此输入图像描述

\n\n

我认为获得第二个解决方案的最佳方法是:

\n\n

在此输入图像描述

\n\n

我想尝试在我的 Java 应用程序中显示 2\xe2\x88\x9a2 而不是 2,828427... 所以我想按照这些步骤开发一个类。让我们考虑 8 的平方根。

\n\n
    \n
  1. 获取 8 的质因数 (2*2*2)
  2. \n
  3. 计算指数并尝试导出它们 (2^2 * 2 --> 2\xe2\x88\x9a2)
  4. \n
\n\n

正如您在下面看到的,我开发了一个输出因子的代码。如果输入 8,该方法estraiRadice()将输出2 * 2 * 2,这是正确的。

\n\n
private int b = 2;\n\npublic String estraiRadice(double x) {\n\n  String resRad = "";\n  int[] exponents = new int[100];\n\n  //Scomposizione in fattori primi\n  while (x > 1) {\n\n    if ((x % b) == 0) {\n      x /= b;\n      resRad += String.valueOf(b) + " * ";\n    } else {\n      b++;\n    }\n  }\n\n  return resRad;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

第二步给我带来了问题,因为我不知道如何创建数字的幂并将其从平方根导出。我的意思是: \xe2\x88\x9a2*2*2 怎么会变成 \xe2\x88\x9a4*2 然后变成 2\xe2\x88\x9a2 ?

\n\n

我认为我可以将每个底数的指数存储在一个数组中,然后尝试以某种方式导出它。你有什么建议吗?

\n

小智 1

您可以使用 HashMap 来存储素数幂对

HashMap<Integer,Integer> getRoots(int x)
{

    HashMap<Integer,Integer> retval = new HashMap<Integer,Integer>();
    int i=2;

    while(i<=x)
    {
        int power = 0;

        while( x%i == 0)
        {
            power++;
            x /= i;
        }

        if(power>0)
        {
            retval.put(i,power);
        }

        if(x==1)
        {
            break;
        }

        i++;
    }

    return retval; 
}
Run Code Online (Sandbox Code Playgroud)