java中的Fermats方程
我试图用费马的最后一个方程做一个递归分析程序,但它不断地返回方程是错误的,我不明白java中的Fermats方程,java,math,recursion,Java,Math,Recursion,我试图用费马的最后一个方程做一个递归分析程序,但它不断地返回方程是错误的,我不明白 public class fermatdata { public static void data(int a, int b, int c, int n) { if ((Math.pow(a, n)) + (Math.pow(b, n)) == (Math.pow(c, n))) { System.out.println("Holy
public class fermatdata
{
public static void data(int a, int b, int c, int n)
{
if ((Math.pow(a, n)) + (Math.pow(b, n)) == (Math.pow(c, n)))
{
System.out.println("Holy smokes, Fermat was wrong!");
return;
}
else
{
data(a-1, b-1, c-1, n-1);
if (n < 2)
{
return;
}
else
{
data(a-1, b-1, c-1, n-1);
}
}
System.out.println("No, that doesn't work. Fermat was right");
}
public static void main(String[] args)
{
System.out.println("Fermat's last theorem stated that the formula a^n + b^n = c^n while n>2 and all of the numbers are integers will never be correct. Here I am going to do an analysis with all the numbers starting at 100,000 and count backwords to 3");
data(100000, 100000, 100000, 100000);
}
}
公共类费马数据
{
公共静态无效数据(int a、int b、int c、int n)
{
如果((数学功率(a,n))+(数学功率(b,n))==(数学功率(c,n)))
{
System.out.println(“天哪,费尔马错了!”);
返回;
}
其他的
{
数据(a-1、b-1、c-1、n-1);
if(n<2)
{
返回;
}
其他的
{
数据(a-1、b-1、c-1、n-1);
}
}
System.out.println(“不,那不行,费尔马是对的”);
}
公共静态void main(字符串[]args)
{
System.out.println(“Fermat的最后一个定理指出,当n>2时,公式a^n+b^n=c^n,并且所有数字都是整数,这是永远不会正确的。在这里,我将对从100000开始的所有数字进行分析,并将回溯词计数为3”);
数据(100000、100000、100000、100000);
}
}
尝试删除第一行,如下所示:
data(a-1, b-1, c-1, n-1);
好,现在看看Math.pow(100001000000)给出了什么(无穷大)。我认为问题在于您使用的值太高(至少对于n而言)。尝试删除第一行,如下所示:
data(a-1, b-1, c-1, n-1);
好,现在看看Math.pow(100001000000)给出了什么(无穷大)。我认为问题在于您使用的值太高(至少对于n而言)。问题在于您使用的幂导致“无穷大”,因为数字太大 由于‘Infinity==Infinity’,程序声明
((Math.pow(a, n)) + (Math.pow(b, n)) == (Math.pow(c, n)))
是正确的问题是,由于数字太大,您使用的幂导致“无穷大” 由于‘Infinity==Infinity’,程序声明
((Math.pow(a, n)) + (Math.pow(b, n)) == (Math.pow(c, n)))
是否正确您首先重复出现,然后检查
n<2
。基本上,这是死代码。请注意双重比较如果((Math.pow(a,n))+(Math.pow(b,n))==(Math.pow(c,n))
你不应该将float/double
与=
进行比较?如果n小于2,它就停止运行代码,我从100000开始,那么它不应该首先运行所有99997个数字吗?所以我应该将这些指数转换为整数?请考虑一下。这是纯逻辑。您首先重复,然后检查n<2
。基本上,这是死代码。请注意双重比较如果((Math.pow(a,n))+(Math.pow(b,n))==(Math.pow(c,n))
你不应该将float/double
与=
进行比较?如果n小于2,它就停止运行代码,我从100000开始,那么它不应该首先运行所有99997个数字吗?所以我应该将这些指数转换为整数?请考虑一下。这是纯粹的逻辑。没有变化,它仍然说它以前做过什么哈哈,所以他有无穷+无穷==无穷。是的,现在它是有意义的。没有变化,它仍然说它以前做过什么哈哈,所以他有无穷+无穷==无穷。是的,现在有道理了。