的背景
因此,我们都知道像这样的经典证明:
A = B
A²= AB
A² -称b²= AB -称b²
(AB)(A + B)= B(AB)
(A + B)= B
B + B =
2B = B
2 = 1(呵呵!)
中当然,错误是您不能被0除。由于a = b,a-b = 0,所以存在被0除的隐藏除法。
挑战
您必须复制此证明。首先,声明两个相等的整数a和b(不管它们叫什么)。然后将aMod和bMod声明为a和b的可修改版本,并分别最初等于a和b。您必须将它们都乘以a,然后从两者中减去b * b。然后必须除以a-b,然后除以b(或a)才能得到。然后,打印出aMod和bMod之间带有等号。
人手不足
当然,由于您声明a和b相等,所以a-b = 0,然后除以0会导致错误。因此,您必须创造性地伪造它。另外,由于您要复制证明,因此打印时aMod和bMod上所有操作的结果均不得相等。他们不必精确地等于2和1,只要两个数字不相等即可。
这是一个例子:
#include <iostream>
#define subtract(a, b) a - b
using namespace std;
int main()
{
int a = 4, b = 4;
int a_2 = a, b_2 = b;
a_2 *= a;
b_2 *= b;
a_2 -= b * b;
b_2 -= b * b;
a_2 = a_2 / subtract(a, b);
b_2 = b_2 / subtract(-b, -a); // a - b == (-b) - (-a)
a_2 /= a;
b_2 /= a;
cout << a_2 << " = " << b_2 << " because I did the same operations on both of them.";
return 0;
}
也许不是最好的,但它说明了这一点。
奖金不足
除了打印等号外,您还可以仅打印两个变量(aMod和bMod),然后使用代码来比较两个变量是否相等,但实际上它们是相等的(并打印某种形式的true
)。
请记住,这是一场人气竞赛,因此最多的获胜者。
此外,名为Mathematics 2.0的新数学版本已利用标准漏洞自动使证明无效。