用java简化根表达式

用java简化根表达式,java,math,methods,square-root,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 } } retu

以下是我目前的方法:

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]=根外的数字,result[1]=根内的数字。到目前为止,我的方法得到了数的所有因子,它是根中初始的非简单数。那么我如何将初始数除以完美平方,得到它的平方根,然后将它乘以结果[0]变量。然后继续循环直到找不到完美的方块。很抱歉,如果这个问题读起来让人困惑,写起来肯定让人困惑。如果您需要任何澄清,请在下面评论。 更新: 因此,从数学上讲,我将:sqrt50转换为5 sqrt2,因为sqrt50=sqrt25*2和25是5的完美平方,因此:5 sqrt2形成。

如果您使用的是结果[0]和结果[1],那么您的声明应该是:

double[] result = new double[2];

instead of

double[] result = new double[1];
另外,如果您使用的是结果[0]和结果[1],那么您的声明应该是:

double[] result = new double[2];

instead of

double[] result = new double[1];

如果我没弄错的话,你想简化一个根式。例如,与之类似,99的平方根可以表示为3 x 11的平方根

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

取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.powi,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实现,适应Java应该一点也不难

对于列表中的每一对素数因子,比如3,3,将根之外的数字乘以素数因子,那么对于3,3,你将把外部值乘以3

对于每一个不适合像11这样一对的素数因子,将根中的数字乘以该素数因子

希望这有帮助。如果这完全不是你想要的,对不起

PS


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

如果我理解正确,你想简化一个部首。例如,与之类似,99的平方根可以表示为3 x 11的平方根

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

取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.powi,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实现,适应Java应该一点也不难

对于列表中的每一对素数因子,比如3,3,将根之外的数字乘以素数因子,那么对于3,3,你将把外部值乘以3

对于每一个不适合像11这样一对的素数因子,将根中的数字乘以该素数因子

希望这有帮助。如果这完全不是你想要的,对不起

PS


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

这很令人困惑:我不清楚你的问题是输出应该是什么。你有数学课吗?你想要什么的定义?这看起来像是他想把sqrt8变成2*sqrt2。我宁愿明确地提取一个主要因素列表,对其进行排序,然后寻找在根下形成“精确平方”的重复项。重复事实

rs可以放在根式下面,其余的应该放在它下面。我建议用浮点参数来做这件事并不是一个真正有意义的方法。如果值是整数,则更有意义。你可以对根下的项使用积分分解,并寻找重复项。。。我更新了我的答案,使之在数学上有意义。什么是SimplificalRadical1.1?它非常令人困惑:从你的问题中,我不清楚输出应该是什么。你有数学课吗?你想要什么的定义?这看起来像是他想把sqrt8变成2*sqrt2。我宁愿明确地提取一个主要因素列表,对其进行排序,然后寻找在根下形成“精确平方”的重复项。重复因子可以放在根的下面,其余的应该放在根的下面。我建议用浮点参数来做这件事并不是一个真正有意义的方法。如果值是整数,则更有意义。你可以对根下的项使用积分分解,并寻找重复项。。。我更新了我的答案,使之在数学上有意义。什么是简化1.1?对不起,我一定是忽略了这一点!对不起,我一定是忽略了这一点!这正是答案。我只是不太明白你说的n的平方根四舍五入到2之间的循环是什么意思?这是第一个场景的第二点。你能发布一个关于第一个场景如何工作的小代码示例吗?@Mohit Deshpande我的意思是从n的平方根int值开始循环。当然,我会发布一个例子:-哦,好的,你的意思是:forint I=1;i