On vous donne les fonctions: h1 (f, * args) et h2 (f, * args)
Les deux sont des méthodes qui sont déjà définies pour vous (ici l'astérisque indique un nombre variable d'arguments)
f est une fonction, * args est une liste de paramètres à passer à cette fonction
h1 renvoie une valeur booléenne: True si la fonction f s'arrête jamais lorsqu'elle est appelée * args et False dans le cas contraire (en supposant que la machine en cours d'exécution dispose de temps et de mémoire infinis et que l'interpréteur / compilateur pour la langue dans laquelle vous écrivez sait gérer le temps et la mémoire infinis).
Si f (* args) appelle un jour h1 ou h2, h1 lève une exception
h2 se comporte exactement comme h1 sauf que si f fait des appels à h1, alors h2 ne lèvera pas d'exception
En aussi peu de caractères que possible, écrivez un programme qui ne prend aucune entrée et devrait sortir:
The Collatz Conjecture is {True/False}
Goldbach's Conjecture is {True/False}
The Twin Primes Conjecture is {True/False}
sur la base de la validité de chacune de ces conjectures.
Voici des liens wikipedia expliquant chacune des conjectures:
http://en.wikipedia.org/wiki/Collatz_conjecture
http://en.wikipedia.org/wiki/Goldbach%27s_conjecture
http://en.wikipedia.org/wiki/Twin_prime
Vous pouvez supposer que n'importe quelle grande bibliothèque d'entiers dans la langue que vous choisissez d'utiliser représentera avec succès de grands entiers arbitraires. En d'autres termes, nous supposerons que tout langage / bibliothèque capable d'exprimer 3**(3**10)est également capable d'exprimer 3**(3**(3**10))sur une machine suffisamment puissante.
De toute évidence, puisqu'il est impossible d'exécuter votre programme, veuillez fournir une explication de son fonctionnement avec le code