到目前为止,这是我的方法:
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 radical
和result[1] = number inside radical
。到目前为止,我的方法得到number
的所有因子(这是激进中的初始UNSIMPLFIED数)。那么如何将初始number
除以完美的平方,得到平方根并将其乘以result[0]
变量。然后保持循环直到找不到完美的正方形。我很抱歉,如果这个问题令人困惑,那么写作肯定会令人困惑。如果您需要任何澄清,请在下面评论
的更新:
所以在数学上我转向:sqrt(50)
到5 sqrt(2)
因为sqrt(50) = sqrt(25 * 2)
而25是5的完美平方,因此:5 sqrt(2)
就形成了。
答案 0 :(得分:4)
如果我理解正确,你想简化激进。例如,99的平方根可以表示为11 x的平方根。
我建议采用以下两种方式之一:
取n的平方根。如果n是一个完美的正方形(即n的平方根没有十进制值),那么我们只返回基数下的平方根值(或1)。其他...
在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的力量。
如果你经历了循环并找不到一个均匀划分的完美正方形,那么你的激进就无法简化了。
查找数字的所有素数因子(例如,99的素数因子是3,3,11)(您可以找到一个样本C实现来查找数字here的素数因子,这根本不应该适应Java)。
对于列表中的每对素数因子(如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];