L'arrière-plan
Donc, nous connaissons tous la preuve classique qui va comme ceci:
a = b
a² = ab
a² - b² = ab - b²
(ab) (a + b) = b (ab)
(a + b) = b
b + b = b
2b = b
2 = 1 (Ha ha!)
de bien sûr, l'erreur est que vous ne pouvez pas diviser par 0. Puisque a = b, a - b = 0, il y avait donc une division cachée par 0.
Le défi
Vous devez reproduire cette preuve. Tout d'abord, déclarez deux entiers a et b (peu importe comment vous les appelez) égaux. Déclarez ensuite aMod et bMod comme étant des versions modifiables de a et b et initialement égales à a et b, respectivement. Vous devez les multiplier tous les deux par a, puis soustraire b * b des deux. Vous devez ensuite diviser par a - b puis les diviser par b (ou a) pour obtenir. Ensuite, imprimez aMod et bMod avec un signe égal entre eux.
Les sournois
Bien sûr, puisque vous avez déclaré a et b égaux, a - b = 0 et la division par 0 provoque une erreur. Vous devez donc le simuler de manière créative. De plus, comme vous essayez de répliquer la preuve, le résultat de toutes les opérations sur aMod et bMod ne doit pas être égal lors de l'impression. Ils ne doivent pas nécessairement correspondre exactement à 2 et 1, juste deux nombres qui ne sont pas égaux.
Voici un exemple:
#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;
}
Peut-être pas le meilleur, mais il illustre le point.
Bonus sournois
Au lieu d'imprimer le signe égal, vous pouvez imprimer uniquement les deux variables (aMod et bMod), puis avoir un code qui semble comparer les deux variables pour l'égalité mais en réalité se trouve qu'elles sont égales (et imprime une certaine forme de true
).
N'oubliez pas qu'il s'agit d'un concours de popularité, donc le plus grand nombre de votes positifs l'emporte.
De plus, une nouvelle version des mathématiques appelée Mathématiques 2.0 a utilisé des failles standard pour invalider automatiquement une preuve.