พื้นหลัง
ดังนั้นเราทุกคนรู้หลักฐานคลาสสิกที่เป็นเช่นนี้:
A = ข
รฒร = AB
รฒร - b² = AB - b²
(AB) (A + B) = b (AB)
(A + B) = 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 แล้วหารด้วย a (b) เพื่อให้ได้ จากนั้นพิมพ์ 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
)
โปรดจำไว้ว่านี่คือการประกวดความนิยมดังนั้นจำนวน upvotes สูงสุดจึงชนะ
นอกจากนี้เวอร์ชันใหม่ของคณิตศาสตร์ที่ชื่อว่า Mathematics 2.0 ได้ใช้ช่องโหว่มาตรฐานทำให้การพิสูจน์เป็นโมฆะโดยอัตโนมัติ