배경
따라서 우리 모두는 다음과 같은 고전적인 증거를 알고 있습니다.
A = B
a² = AB
a² - b² = AB - b²
(AB) (a + 나) = 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이라는 새로운 버전의 수학에서는 표준 허점을 사용하여 자동으로 증명을 무효화합니다.