简化java中的基本表达式

时间:2011-03-19 17:40:32

标签: java math methods square-root

到目前为止,这是我的方法:

public static int[] simplifyRadical(int number) {
    int[] result = new int[2];
    for (int i = 1; i < number / 2; i++) {
        if ((i % number == 0)) {
            //IS a factor of the number in the radical
        }
    }
    return result;
}

我使用的格式为result[0] = number outside radicalresult[1] = number inside radical。到目前为止,我的方法得到number的所有因子(这是激进中的初始UNSIMPLFIED数)。那么如何将初始number除以完美的平方,得到平方根并将其乘以result[0]变量。然后保持循环直到找不到完美的正方形。我很抱歉,如果这个问题令人困惑,那么写作肯定会令人困惑。如果您需要任何澄清,请在下面评论 的更新:
所以在数学上我转向:sqrt(50)5 sqrt(2)因为sqrt(50) = sqrt(25 * 2)而25是5的完美平方,因此:5 sqrt(2)就形成了。

2 个答案:

答案 0 :(得分:4)

如果我理解正确,你想简化激进。例如,99的平方根可以表示为11 x的平方根。

我建议采用以下两种方式之一:


    1. 取n的平方根。如果n是一个完美的正方形(即n的平方根没有十进制值),那么我们只返回基数下的平方根值(或1)。其他...

    2. 在n的平方根之间循环向下舍入到2.类似于:

      double nSquareRoot = Math.sqrt(n);
      int squareRootRounded = (int)nSquareRoot;
      //Here goes the first step of the algorithm
      //...
      for (int i = squareRootRounded; i>1; i--) 
      

      如果计数器平方均分为n(即沿着n % Math.pow(i,2)==0行的某些东西),则返回计数器在你的基数之外,n除以基数内的平方(例如,如果n = 99)并且计数器位于3,你将3放在外面,而99/9或11放在里面)。或者在代码中,一旦你确定i,以2的幂,均分为n:

      result[0] = i; //Set outside the radical to the counter
      result[1] = n/s; //Set inside the radical to the n divided by s
      

      其中s等于i的力量。

    3. 如果你经历了循环并找不到一个均匀划分的完美正方形,那么你的激进就无法简化了。


    1. 查找数字的所有素数因子(例如,99的素数因子是3,3,11)(您可以找到一个样本C实现来查找数字here的素数因子,这根本不应该适应Java)。

    2. 对于列表中的每对素数因子(如3,3),将基数外的数字乘以该素数因子(因此对于3,3,您将外部值乘以3)。

    3. 对于不适合成对的每个素数因子(如11),将基数内的数乘以该素因子。

希望这会有所帮助。如果这完全不是你想要的,抱歉。

PS

即使你使用第一个算法,你仍然应该看看第二个算法是如何工作的,因为它是使用prime factorization,这是一种有用的手工技术。

答案 1 :(得分:1)

此外,如果您使用的是result[0]result[1],那么您的声明应为:

double[] result = new double[2];

instead of

double[] result = new double[1];