在Java中获取使用求和的函数的逆
我有一个只有一个类的程序,看起来像这样在Java中获取使用求和的函数的逆,java,Java,我有一个只有一个类的程序,看起来像这样 public class Functions { public static void main(String[] args) { System.out.println(summationFunction(1)); //Prints 13 System.out.println(summationFunction(2)); //Prints 29 System.out.println(summatio
public class Functions {
public static void main(String[] args) {
System.out.println(summationFunction(1)); //Prints 13
System.out.println(summationFunction(2)); //Prints 29
System.out.println(summationFunction(3)); //Prints 48
System.out.println(summationFunction(4)); //Prints 70
}
public static int summationFunction(int input) {
int summedNumber = 0;
int i = input;
while (i > 0) {
summedNumber += i * 3;
i--;
}
return 10 * input + (summedNumber);
}
}
因此,该程序将接收给定的数字并对其应用此函数:
这一切都运行得很好(我已经运行了类函数
,所有的东西都按它应该的那样打印出来。)但是,我需要找到这个函数的逆函数,并且我需要能够将它转换成代码;我不知道怎么做
我基本上需要一个返回如下值的函数:
public static void main(String[] args) {
System.out.println(summationFunction(13)); //Prints 1
System.out.println(summationFunction(29)); //Prints 2
System.out.println(summationFunction(48)); //Prints 3
System.out.println(summationFunction(70)); //Prints 4
}
可以看出,它与原始函数相反
因此,为了总结所有内容,我需要一个函数,该函数将返回原始函数的逆函数(求和函数)
,并且我想知道如何在代码中对此进行建模,或者是否有快速解。
还有一件事:我知道我可以让这个方法接受一个输入并搜索原始方法最相似的输出,但是我想看看是否有一种更简单的方法可以做到这一点,它不涉及搜索,从而提供更快的输出速度。如果你愿意,你可以安全地假设,逆函数的输入总是一个数字,它会给出一个整数输出,比如13,29,48,70等等
顺便问一下,如果你打算否决这个问题,你至少能给出一个理由吗?也许是评论?我看不出有任何理由认为这个问题有资格被否决,一个理由会有所帮助。你的总和可以这样写
3*x*(x+1)/2
所以你有方程10*x+3*x*(x+1)/2=y
你需要解它
Wolfram alpha告诉我们,结果将是1/6.0*(-23.0+sqrt(529.0+24.0*y))
救援
它告诉您该函数可以写成:
1/24*(6*x+23)^2-529/24
如果你想解f(x)=a,你有:
x = 1/6*(sqrt(24*a+529)-23)
a = 70
# => x = 4
注意:使用Wolfram不应妨碍您自己找到答案
sum(something*i) is equal to something*sum(i) because something (3 in this case ) doesn't depend on i.
和(i,i=1..n)等于n*(n+1)/2,很容易证明(参见)
它是a,a=3/2,b=23/2,c=-70或c=-29或c=..Ahh。我以前没听说过Wolfram。感谢您和@talex提供的资源和更好的描述!
So your function becomes 10*x+3*x*(x+1)/2
Expanded, it is :
(3 x^2)/2+(23 x)/2
You need to solve (3 x^2)/2+(23 x)/2 = 70, in other words :
(3 x^2)/2+(23 x)/2 - 70 = 0