Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 解方程。计数(x,y)_C++_C_Math_Equation Solving - Fatal编程技术网

C++ 解方程。计数(x,y)

C++ 解方程。计数(x,y),c++,c,math,equation-solving,C++,C,Math,Equation Solving,我的数学有问题: 假设我们有一个函数:F(x,y)=p;我的问题是:什么是计算这个函数的合适(x,y)图的最有效方法?这意味着我不需要坐标本身,但我需要一个数量的坐标。P在一个范围内:[0;10^14]。“x”和“y”是整数。是用bruteforce解决的,还是有一些高级技巧(数学/编程语言(C,C++)可以足够快地解决这个问题 更具体地说,函数是:x*y-((x+y)/2)+1。您有一个双参数函数,需要为给定常数求解它 这是数学中一个相当大的领域,可能有几十种算法来解你的方程。许多人使用的一个

我的数学有问题:

假设我们有一个函数:F(x,y)=p;我的问题是:什么是计算这个函数的合适(x,y)图的最有效方法?这意味着我不需要坐标本身,但我需要一个数量的坐标。P在一个范围内:[0;10^14]。“x”和“y”是整数。是用bruteforce解决的,还是有一些高级技巧(数学/编程语言(C,C++)可以足够快地解决这个问题


更具体地说,函数是:x*y-((x+y)/2)+1。

您有一个双参数函数,需要为给定常数求解它

这是数学中一个相当大的领域,可能有几十种算法来解你的方程。许多人使用的一个关键思想是,如果你找到一个点,在这两点之间,F必须等于P

求根(或零,当然可以通过取F'=F-p转换为)的最基本算法之一是。我建议你从这一点开始,读一读更高级的算法。这是一个非常大的研究领域,读起来很开心

维基百科有一个列表,你可以把它作为起点。

x*y-((x+y)/2)+1==p
相当于
(2x-1)(2y-1)==(4P-3)

因此,您基本上是在寻找
4P-3
的因式分解数。在C或C++中如何计算一个数可能是一个不同的问题,但每个分解都会产生一个原始方程的解。[编辑:事实上有两种解决方案,因为如果
A*B==C
,那么当然
(-A)*(-B)==C


对于编程语言C和C++,只要确保使用一个足够大的类型来包含<代码> 4×10 ^ 14 < /代码>。代码> INT/COM>不做,所以尝试<代码>长长< /C> > < /P> C或C++?选择一个。你是说你想计算一些固定的p的整数解的f(x,y)=p吗?你想解决f(x,y)=,还是你想把它画出来,自动寻找一个合适的范围?C还是C++?我仍然不知道该用什么。取决于C++有什么特殊的技术,可以简化问题。如果不是-没有理由使用它。C和C++都没有任何帮助解决丢番图方程,所以你需要应用一些数学推理。一个非常简单的观察结果:你的方程分解为
(x-1/2)*(y-1/2)==P-3/4
,因此即使你确实需要暴力,你只需要在其中一个变量中这样做。显然,在您选择的语言中,您只能在整数类型的有限范围内使用蛮力,而不能在所有整数上使用蛮力。牛顿方法和大多数其他寻根算法并不真正关注整数值函数,但当然您仍然可以使用许多整数值函数(例如,只需解浮点方程,然后将解取整,如果它仍然是整数方程的解,则尝试,如果不是,则尝试相邻值等等。)“关键思想”假设一个函数是连续的。一个典型的反例是
y=1/x
。y=0是没有意义的,即使y=-1在x=-1,y=+1在x=+1。这个答案与原来的问题几乎没有任何关系。
x,y
是整数这一事实非常重要。@MSalters:取任意常数C,即使是y=1/x,你也可以找到y=C的值,但奇点是特殊的,是的。@Serge:他问的是如何绘制它们,这是一个非常普遍的问题,而不是如何解丢番图方程。我认为这几乎是完整的解。+1(@Dmitri:为什么你不把这个答案标记为正确答案?)这两个答案似乎都是正确的,至少对我来说:)我会看看它们。